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


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

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

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

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

  • 相关阅读:
    OpenGL第十节:彩色键控与混合
    OpenGL第九节:操作像素点去更新纹理
    OpenGL第八节:非二次幂的纹理渲染处理
    OpenGL第七节:纹理绘制裁剪图片的指定部分
    OpenGL第六节:加载png图片
    OpenGL第五节:纹理贴图和像素操作
    OpenGL第四节:滚动和矩阵栈
    OpenGL第三节:Viewport视口
    OpenGL第二节:绘制多个颜色四边形
    TextView关键字高亮
  • 原文地址:https://www.cnblogs.com/lubocsu/p/5093420.html
Copyright © 2020-2023  润新知