码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-01-01 17:01:36      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:

 

 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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!