class Test
{
    int a;
    int b=a+1; 
}此处eclipse怎么不报错啊,而且输出b的时候,竟然得到了1,意思就是a初始化为0了,可是b=a+1,是不合法的啊,没有被初始化啊,如果是static int a此会初始化啊
求解.................. 

解决方案 »

  1.   

    为啥不合法?int b=a+1; 明显就是在你实例化这个对象时才会执行的。
    这两句话:
    int a;
    int b=a+1;  在new的时候执行顺序是:
    int a; 内存分配
    int b; 内存分配
    a = 0; 初始化缺省赋值
    b = a+1; 初始化赋值
      

  2.   

    成员变量时默认初始化的,你的int a; 就是成员变量
      

  3.   

    java貌似有缺省赋值,当你自定义一个变量没有赋初始值的时候,系统会默认给他赋一个的!
      

  4.   

    难道这是java的特性吗,我在c#中实验就不行
      

  5.   

    学习了,java确实是在对象初始化时,把它的成员变量给初始化了,把int b=a+1; 这句放在public static void main下面执行就不行了
      

  6.   

    在你创建这个类的对象的时候,直接定义在类里面的成员变量(比如你的a和b都是成员变量而不是定义在方法里的局部变量)都会先于构造方法执行。
    JVM会第一个初始成员变量,你没给a赋值,那它就初始为0。
      

  7.   

    学习了~在做Java程序时,总是有些变量不赋初值就会出错。
      

  8.   

    不明白的时候用System.out.println(a);打印一下不就知道了
      

  9.   

    如果你没有进行初始化,java中的成员变量会自动初始化。基本类型为0的等价值,如int初始化为0,boolean初始化为false等,对象的引用变量初始化为null。但是,需要注意,只有成员变量才会自动初始化,对于局部变量,将不会进行自动初始化,如果你没有进行显式得初始化,编译器将会报错。
      

  10.   

    实例化成员变量时,按顺序先把int型自动初始化为0,然后才执行到b=a+1,所以这里并没有问题
      

  11.   

    类的成员变量在定义对象的时候进行初始化,jvm会自动给变量添加默认的值。int a; 先为成员变量分配内存,然后再为其赋值,a=0; 这样就算初始化结束了。
      

  12.   

    类的成员变量可以不初始化,编译器根据其类型默认初始化,int 初始化为0!在方法/函数中的变量必须显示初始化,编译器不会默认初始化!所以,不会出什么问题!!