一。实例类变量和类变量

例一:java基础-----------对象与内存控制

java基础-----------对象与内存控制

java基础-----------对象与内存控制


编译时将提示“非法前向引用”,两个类变量(即用static修饰)也不允许采用“非法前向引用”。
可改为

java基础-----------对象与内存控制

java基础-----------对象与内存控制

java基础-----------对象与内存控制
因为类变量的初始化时机总是处于实例变量的初始化之前

1.1实例变量和类变量的属性
java基础-----------对象与内存控制
 

java基础-----------对象与内存控制

java基础-----------对象与内存控制
解:第一个代码输出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。定义实例变量时指定初始值
2.非静态初始化块中对实例变量指定初始值
3.构造器中对实例变量指定初始值
注:每当程序调用指定构造器创建java对象时,该构造器必然会获得执行机会,除此之外,该类所包含的非静态初始化块将会获得执行的机会,而且总是在构造器执行之前。
     非静态初始化块和定义实例变量时指定初始值,它们的执行顺序与它们在源程序中的排列顺序相同




相关文章: