类变量(类静态成员): 类被加载时产生;它的生存期是类的生存期;自动初始化(类被加载) 成员变量(类成员): 在使用new创建该类实例时产生;它的生存期与该类实例对象的生存期相同; 自动初始化(构造方法被调用) 局部变量(类的方法中的变量): 该方法被调用时产生; 在该方法退出后结束; 必须显式初始化 1 方法中的变量,不会被自动初始化。比如main方法中的变量index,定义如int index; 它不会被自动初始化。 2 当用new定义一些变量,会自动初始化,如 int [] d = new int[100]; 它自动初始化为0。 各数据类型的数组自动初始值如下: byte 0 short 0 int 0 long 0l float 0.0f double 0.0d char /u0000 即数值0,而非字符0,因为它是0~~65535的序列。字符0位置在48上,即/u0030 boolean false reference null 如String 3 类成员如果没有被定义会自动获取一个初始值。首先运行声明的类成员,如果有定义,则取定义值,随后调用构造函数,如果构造函数中对已定义变量重赋值,则取重赋的值。 4 Stack类型自动初始化为空。空显示为[],而不是null。 举例: class Test { static int myArg ; public static void main(String[] args) { int myArg; //如果此行没有写,即可通过编译了。 System.out.pringln(myArg); } } 通不过编译。 5 数组定义 可以如下定义 int iArray[] = null; 6 静态块和类成员定义的优先级 //仍模糊,静态块,或代码块什么时候调用,是在类生成初么?那应该要比成员变量要早,因此,首先int i = 10;其次 i = 20; 如下: public class Test { int i = 20; static { int i = 10; } public static void main(String [] args) { Test a = new Test(); System.out.println(a.i); } }