标签:
1 public class InstanceInitializer { 2 private int i = 1; 3 private int getI() { 4 return i; 5 } 6 private int j = getI(); 7 8 9 public InstanceInitializer() 10 { 11 i = 2; 12 } 13 public static void main(String[] args) { 14 InstanceInitializer ii = new InstanceInitializer(); 15 System.out.println(ii.j); 16 System.out.println(ii.i); 17 } 18 }
以上程序运行结果:
1 public class InstanceInitializer { 2 private int i = 1; 3 private int j = getI(); 4 private int getI() { 5 return i; 6 } 7 8 9 10 public InstanceInitializer() 11 { 12 i = 2; 13 } 14 public static void main(String[] args) { 15 InstanceInitializer ii = new InstanceInitializer(); 16 System.out.println(ii.j); 17 System.out.println(ii.i); 18 } 19 }
以上程序运行结果:
1 public class InstanceInitializer { 2 public InstanceInitializer() 3 { 4 i = 2; 5 } 6 private int i = 1; 7 private int j = getI(); 8 private int getI() { 9 return i; 10 } 11 12 public static void main(String[] args) { 13 InstanceInitializer ii = new InstanceInitializer(); 14 System.out.println(ii.j); 15 System.out.println(ii.i); 16 } 17 }
以上程序运行结果:
1 public class InstanceInitializer { 2 private int j = getI(); 3 private int i = 1; 4 public InstanceInitializer() 5 { 6 i = 2; 7 } 8 private int getI() { 9 return i; 10 } 11 12 public static void main(String[] args) { 13 InstanceInitializer ii = new InstanceInitializer(); 14 System.out.println(ii.j); 15 System.out.println(ii.i); 16 } 17 }
以上程序运行结果:
以上程序,因为在定义实例变量j 后,对其初始化的时候,所调运的函数需要另一个实例变量i 的拷贝,可是此时该实例变量并未定义以及初始化,所以此时调运该函数失败。
以上对比结果说明:1.实例变量的定义、2.初始化、3. 为实例变量的初始化而调用的函数定义中含有某已经被成功定义、初始化的的实例变量 4.构造函数的定义是
程序编辑与运行的基本顺序。
也就是说明:程序是按照你书写程序中的实例变量的顺序逐个进行初始化的。(类变量是优先定义与初始化的)
实例变量的相互赋值传递的是拷贝、不是引用。
标签:
原文地址:http://www.cnblogs.com/lubocsu/p/5093420.html