代码如下
1.局部变量,报错!!!
public void test(){ int i; System.out.println(i); }
2.成员变量,输出0
int i; @Test public void test(){ System.out.println(i); }
之前一直有疑问,但是也不知道具体是什么原因,今天看了thinking in java大致就了解了:
其实说到底还是java规范,因为java规定要这样就必须这样==。
原理就是,java规定,所有变量在使用之前要保证是经过初始化的,那么,局部变量报错的原因就很明显了!
但是,为什么成员变量就不会呢,成员变量在使用之前如果没有初始化,jvm就会帮我们初始化,
默认值如下:
Boolean false
Char ‘\u0000‘(null)
byte (byte)0
short (short)0
int 0
long 0L
float 0.0f
double 0.0d
原因就是,jvm认为我们完全有可能在某一个方法中对该成员变量进行初始化,所以就不会报错,而且没有初始化的话就会自动帮我们初始化,赋给默认值!
但是要记住一点,无论如何,每个变量都会进行自动初始化,这是无法阻止的,也就是我们自己初始化之前,java都会先执行自动初始化。
时间: 2024-09-30 04:10:49