一。实例类变量和类变量
例一:
编译时将提示“非法前向引用”,两个类变量(即用static修饰)也不允许采用“非法前向引用”。
可改为
因为类变量的初始化时机总是处于实例变量的初始化之前
1.1实例变量和类变量的属性
解:第一个代码输出2
第二个代码输出2.因为Person对象p本身并没有eyeNum类变量,因此程序通过p来访问eyeNum类变量时,底层 依然会转换为通过Person类访问eyeNum类变量。底层为:当程序创建p对象时,系统不再为eyeNum类变量分配内存空间,执行初始化而只为p对象的实例变量执行初始化------因为类变量属于Person类本身
第三个代码输出3,3,3。当Person类访问eyeNum类变量被改变以后,程序通过p,p2,person访问eyenum时都将输出3
1.2。实例变量的初始化时机
1.1实例变量和类变量的属性
程序可在三个地方对实例变量执行初始化:1。定义实例变量时指定初始值
程序可在三个地方对实例变量执行初始化:1。定义实例变量时指定初始值
2.非静态初始化块中对实例变量指定初始值
3.构造器中对实例变量指定初始值
注:每当程序调用指定构造器创建java对象时,该构造器必然会获得执行机会,除此之外,该类所包含的非静态初始化块将会获得执行的机会,而且总是在构造器执行之前。
非静态初始化块和定义实例变量时指定初始值,它们的执行顺序与它们在源程序中的排列顺序相同