程序启动的顺序以及实例变量相互赋值、传递拷贝的理解

 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.构造函数的定义是

                         程序编辑与运行的基本顺序。

                       也就是说明:程序是按照你书写程序中的实例变量的顺序逐个进行初始化的。(类变量是优先定义与初始化的)

                        实例变量的相互赋值传递的是拷贝、不是引用。

原文地址:https://www.cnblogs.com/lubocsu/p/5093420.html