精华内容
下载资源
问答
  • Java 局部变量初始化问题

    千次阅读 2018-06-08 09:05:49
    Java 中类的成员变量会被自动初始化,但是方法里头的局部变量不会被自动初始化   上图中 i 是成员变量,默认会自动初始化,所以直接使用没有报错。但是 j 是方法中的局部变量,没有初始化直接使用会出现编译...

    Java 中类的成员变量会被自动初始化,但是方法里头的局部变量不会被自动初始化

    code
      上图中 i 是成员变量,默认会自动初始化,所以直接使用没有报错。但是 j 是方法中的局部变量,没有初始化直接使用会出现编译错误。当然如果没有使用 j 而只是声明了却未初始化,那么只会有警告,因为编译器希望你接下来能对 j 进行初始化。

      注意:boolean 类型默认值是 false
    展开全文
  • Java全局变量和局部变量初始化问题

    千次阅读 2020-02-21 23:24:53
    我们先来看一个比较的例子,最近在知乎看到的帖子。... //类的成员变量 public static void main(String[] args) { TestDemo td =new TestDemo(); //默认的构造方法 System.out.println(td.a); ...

    变量的初始化问题

    我们先来看一个例子,最近在知乎看到的帖子。

     
      public class TestDemo {
        int a;  //类的成员变量
        public static void main(String[] args) {
            TestDemo td =new TestDemo(); //默认的构造方法
            System.out.println(td.a);
        }
    }
    
        // 第二种类型 
      public  class TestDemo {
        public static void main(String[] args) {
           int a;
           System.out.println(a);
        }
    }
    
    

      我先验证了一下结果给大家说,上面部分代码运行结果为 0 . 下面部分代码编译执行报错(变量可能未初始化)。

    成员变量和局部变量的区别

      上面两部分代码的区别是上面代码,变量 a 是作为类的成员变量,主方法中创建了对象,我们发现此时的 a 结果是 0,如果我们换成字符串就是 null ,boolean型变量默认就是 false ,所以我们发现当变量作为类的成员变量的时候类在创建对象的时候会默认给它们赋初值。

      而下面部分代码则是方法中的变量,也就是局部变量。我们直接打印它或者用到它的时候直接会报错。

      如何解释这一现象?局部变量必须赋初始值?下面我们多方面分析一下。

      首先,Java语言是这么明文规定的。局部变量使用前必须赋值。为什么Java 语言要这么规定呢。我们知道Java 是一门面向对象的语言,它将重点放在 数据 和对象的接口上。就好比一个木匠,一个“面向对象”的木匠始终关注的是所制作的椅子,第二位才是所使用的工具和打造的过程;而一个“非面向对象的”木匠首先考虑的是所用的工具。

      最上面部分代码,将 a 变量作为类的成员变量,当我们创建对象的时候,Java 虚拟机会在系统的堆 (heap)区域申请一块内存区域来存放类的数据,在这里成员变量就是类的数据,这个时候JVM为加载的类要分配内存啦!成员变量作为类的数据是会随着类的加载在堆中分配内存,注意了,JVM 在申请内存时自动给它们赋了初值。这里附上下面一个堆栈简单示意图,
    在这里插入图片描述

      至于默认给类的成员变量赋初值有什么机理吗?我们可以想到类都有一个默认的构造方法的。(因为我们没有给出显式的构造方法)我们创建对象的时候实际上是调用了默认的构造方法的,会给成员变量赋一个默认的初始值,这样在打印输出的时候才会有值输出而不报错。这时我们看一下第二段代码,并没有涉及到任何实例化对象的操作,在主函数里面 a 是没有任何东西对其初始化的,所以直接对其输出会直接报错。

      现在我们想一想如果Java 设计的时候也给方法里的局部变量赋初始值会怎样? 一个方法里面可能会有很多个局部变量,类里面也会有很多个方法,而且生命周期短。如果我们都给它们赋初值,一定是一笔很大的开销,而且安全性也达不到要求,所以换成我是虚拟机也不想干这等活儿…但程序员们最好有给局部变量初始化的习惯。我们不妨看下下面这个例子。

        public static void main(String[] args) {
            for (int i = 0; i < 100; i++) {
                int a;
                if (i % 2 == 0) {
                    a = 1;
                } else {
                    a = 2;
                }
            }
        }
    

    如果我们每次都对 a 进行初始化,那真的是丝毫没有必要的。

      我们还可以换个角度来想这个问题,假如你是开发 Java 这门伟大语言的开发者,你在设计的时候,类的成员变量是要在堆中分配内存的,方法中的局部变量是在栈中的。其实,不管是局部变量还是成员变量,都是必须要初始化的,那为什么成员变量会自动初始化?其实正是因为成员变量属于对象,而对象是保存在堆中的,随着类的加载在为对象开辟空间的时候自动为成员变量赋初值,如果我们还要给局部变量都赋初值,那性能影响太大了吧,开发者想到这里的时候可能就直接将给局部变量初始化的想法抹杀掉了吧。同时在一般情况下成员变量也不会有初始值,你可以联想一下,有一个class 比如说是人类,里面的身高体重如果定义时候给了初始值,是不是觉得一点都不抽象了,所以成员变量不初始化可能更符合需求,创建类的对象的时候它们也会有初始值。(ps: static 修饰的成员变量不用创建对象也可以哦)

      最后套用《Thinking in Java》作者的话:

    编译器当然可以为局部变量附一个默认值,但是未初始化的局部变量更有可能是程序员的疏忽,所以采用默认值范围会掩盖这种失误。因此强制程序员提供一个初始值,往往能够帮助找出程序里的缺陷。

    果然是大佬,说出来的话就是让人无可反驳。

    展开全文
  • Java局部变量必须初始化

    千次阅读 2020-12-24 22:37:30
    Java中有两种变量,局部变量和成员变量。 成员变量可以不进行初始化,虚拟机也会确保它有一个默认的值。 局部变量不能这样做,我们必须对它进行赋值,才能使用它。

    Java中有两种变量,局部变量和成员变量。

    成员变量可以不进行初始化,虚拟机也会确保它有一个默认的值。

    局部变量不能这样做,我们必须对它进行赋值,才能使用它。

    展开全文
  • java局部变量初始化

    千次阅读 2018-07-15 00:51:42
    类变量有两次赋初始值的过程,一次在准备阶段,赋予系统初始值(如果被final修饰,初始值可能不是0或者null,false),另外一次在初始化阶段,赋予程序员定义的初始值,但是局部变量不一样,系统不会赋予初始值,除非...
    类变量有两次赋初始值的过程,一次在准备阶段,赋予系统初始值(如果被final修饰,初始值可能不是0或者null,false),另外一次在初始化阶段,赋予程序员定义的初始值,但是局部变量不一样,系统不会赋予初始值,除非你在自己的程序中赋予它初始值。
    展开全文
  • 一、类的成员变量初始化 ---在JVM类加载阶段完成 类的成员变量又分为静态成员变量和非静态成员变量。 静态成员变量 静态成员变量会被初始化两次,第一次在“准备”阶段,先进行一次初始化,系统附上默认值;第二...
  • java局部变量必须要初始化的原理

    千次阅读 2018-02-28 19:22:56
    问题可能很多java开发人员也没有注意到,java语言中的局部变量是必须要初始化的,但是这是为什么呢?...其实正是因为成员变量属于对象,而对象是保存在 堆中的,所以jvm就在初始化类的时候把成员变量初始化呢,而
  • Java 成员变量有初始值,而局部变量没有初始值。 如下所示,代码不能编译通过 publicstaticvoidmain(String[] args){ String s; System.out.println("s="+s); } 转载于:...
  • 转载:https://blog.csdn.net/qq_24644517/article/details/82288493 package deep; public class DefaultValue { // 实例成员变量 private boolean bool; private byte b; private short s; private ...
  • 局部变量定义后,必须初始化,即赋值,才能使用(它没有默认值)。 而类变量定义后可以不初始化,因为它有默认值。 类变量(实例变量):定义在类中,方法体之外。成员变量前面加 static 修饰符。 局部变量:定义在...
  • Java中有两种变量,局部变量和成员变量。 成员变量可以不进行初始化,虚拟机也会确保它有一个默认的值。 局部变量不能这样做,我们必须对它进行赋值,才能使用它。 int i;//为初始化 System.out.println(i);//...
  • 为什么Java中全局变量...一、类的成员变量初始化 —在JVM类加载阶段完成 类的成员变量又分为静态成员变量和非静态成员变量。 1.静态成员变量 静态成员变量会被初始化两次,第一次在“准备”阶段,先进行一次初始化,系
  • 成员变量:在类中定义的变量 局部变量:在方法体中定义的变量(形式参数、代码块中的变量) ...实际情况:在Java中,对象保存在堆内存中,成员变量属于对象,JVM在初始化类的时候会自动把成员...
  • 请问定义个数组变量作为Java中的局部变量,没有初始化怎么可以编译通过int[]a=newint[5];打印a[0]结果为0这是为何,不是局部变量一定要初始化么,不会默认初始化的吗? 答:java里面的int数组是有初始值的 如果未...
  • Java类的初始化变量初始化

    万次阅读 2018-06-02 15:21:23
    Java类的初始化变量初始化知识点Java常量, final 修饰,值被设定后不能再被修改静态变量里, static 修饰,顾名思义,无须创建对象,便可在内存中申请一个存储空间进行存储成员变量, 也称实例变量,它随着当前...
  • java局部变量没有初始值,运行时会直接报错:java: 可能尚未初始化变量a,就算打印了也无济于事,还会报错。要解决的方法是: 给a赋初始值。注意:java中的局部变量一定要赋初始值。编译运行后就会在控制台会出现...
  • 在刚开始学习Java的时候,就了解了Java基础中的变量,虽然知道这个以后会经常用到,但没想到了基本语法这里,竟然又冒出来了成员变量和局部变量。变来变去太容易让人搞晕了,今天我们就挑拣出来梳理一下!
  • '\u0000'等),局部变量不会有默认初始值, public class test01 { private String s; private int [] year = new int[3]; public String getS() { return s; } public void setS(String s
  • 关于局部变量初始化

    千次阅读 2018-10-26 15:22:35
    我们经常被告知:在Java语言规定,局部变量必须要先初始化,然后才能使用。为什么呢? 首先 Java 语言就是这么规定的。其实无论成员变量还是局部变量都要初始化。只是JVM帮我们初始化了成员变量。 第一种解释: ...
  • JAVA之成员变量初始化

    千次阅读 2019-07-07 13:53:28
    java中成员变量的初始化,如果是普通成员变量可以赋初值,如果没赋初值,则系统会自动赋初值。而对于局部变量必须手动赋初值。 package MyText2; public class MyText1 { int str1; public static void ...
  • Java变量需要初始化吗?

    千次阅读 2019-11-21 10:35:35
    实例变量不需要初始化局部变量必须初始化。 class Something { boolean i; public void doSomething() { System.out.println("i = " + i); int j; System.out.println(j);//会报编译错误 } } ...
  • Java 变量一定要初始化吗?

    千次阅读 2020-03-02 20:02:42
    Java 变量一定要初始化吗?解答。。。
  • 类变量(也叫静态变量):是类中独立于方法之外的变量,用static 修饰。(static表示“全局的”、“静态的”,用来修饰成员变量和成员方法,或静态代码块(静态代码块独立于类成员,jvm...局部变量是类的方法中的变量。
  • 不管程序有没有显示的初始化Java 虚拟机都会先自动给它初始化为默认值public class Copy { static String s; public static void main(String[] args){ System.out.println("s="+s); } } s=null2.局部变量必须...
  • 成员变量定义在方法外,类中。使用时可以不初始化(赋值操作),java编译器会根据其类型赋默认值,比如int i;...而局部变量使用时(注意是使用时,如果声明后不使用它也是不报错的)必须初始化,但方法中的形参除外。 ...
  • 一个我们编写的java源码类(机器码)要想被正式运行...在这个过程中,我们会对我们定义的成员变量进行两次初始化,一次赋默认初值(0值,boolean赋为false),一次赋我们定义的初值,如: class Test{ int a = 2; }
  • JAVA局部变量初始化

    千次阅读 2013-05-24 21:56:45
    JAVA局部变量初始化 (2011-05-29 12:02:37) 转载▼ 标签: 杂谈 分类: JAVA 在一个函数或代码块中定义的变量成为局部变量,java中的局部变量相当于C++中的局部动态变量,java没有C++中...
  • Java中,null值表示引用不指向任何对象。运行过程中系统发现使用了...1.如果是对象的field的话那么系统在初始化对象的时候会把那些对象的值赋值为null,基本数据类型也有它们的初始值 2.如果是在方法内,那么程序...
  • 静态属性:随类的存在而存在,是在类加载的初始化 非静态属性:随实例的属性存在而存在。 局部变量局部变量不能加static,包括protected, private, public这些也不能加。局部变量保存在栈中。 局部编程必须在...
  • java局部变量没有默认值

    万次阅读 2018-01-13 17:31:13
    今天做到一道题,关于java局部变量没有默认值,编译不能通过的这个知识点的考察 public class Test{ String a; public static void(String args[]){ String s; System.out.println(s); } } 此时a是成员变量...
  • Java局部变量中,定义变量需要初始化,不然就会在调用的时候报错,无法被调用 // 定义变量 int a ; System.out.println(a); 他会报错变量未初始化; 虽然变量三要素里面说,类型的作用为为此变量指定此类型相应...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 161,902
精华内容 64,760
关键字:

java局部变量初始化

java 订阅