zoukankan      html  css  js  c++  java
  • 程序启动的顺序以及实例变量相互赋值、传递拷贝的理解

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

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

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

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

  • 相关阅读:
    【计算机视觉】行人检测(Pedestrian Detection)资源
    【计算机视觉】图像处理与计算机视觉基础,经典以及最近发展
    【计算机视觉】图像处理与计算机视觉基础,经典以及最近发展
    【计算机视觉】期刊整理
    【计算机视觉】期刊整理
    【计算机视觉】TPAMI的Editors
    【计算机视觉】TPAMI的Editors
    匈牙利命名法收藏
    匈牙利命名法收藏
    【计算机视觉】计算机视觉/图像/模式识别方向期刊会议
  • 原文地址:https://www.cnblogs.com/lubocsu/p/5093420.html
Copyright © 2011-2022 走看看