程序启动的顺序以及实例变量相互赋值、传递拷贝的理解
2016-01-01 16:20
435 查看
public class InstanceInitializer { private int i = 1; private int getI() { return i; } private int j = getI(); public InstanceInitializer() { i = 2; } public static void main(String[] args) { InstanceInitializer ii = new InstanceInitializer(); System.out.println(ii.j); System.out.println(ii.i); } }
以上程序运行结果:
public class InstanceInitializer { private int i = 1; private int j = getI(); private int getI() { return i; } public InstanceInitializer() { i = 2; } public static void main(String[] args) { InstanceInitializer ii = new InstanceInitializer(); System.out.println(ii.j); System.out.println(ii.i); } }
以上程序运行结果:
public class InstanceInitializer { public InstanceInitializer() { i = 2; } private int i = 1; private int j = getI(); private int getI() { return i; } public static void main(String[] args) { InstanceInitializer ii = new InstanceInitializer(); System.out.println(ii.j); System.out.println(ii.i); } }
以上程序运行结果:
public class InstanceInitializer { private int j = getI(); private int i = 1; public InstanceInitializer() { i = 2; } private int getI() { return i; } 11 public static void main(String[] args) { InstanceInitializer ii = new InstanceInitializer(); System.out.println(ii.j); System.out.println(ii.i); } }
以上程序运行结果:
以上程序,因为在定义实例变量j 后,对其初始化的时候,所调运的函数需要另一个实例变量i 的拷贝,可是此时该实例变量并未定义以及初始化,所以此时调运该函数失败。
以上对比结果说明:1.实例变量的定义、2.初始化、3. 为实例变量的初始化而调用的函数定义中含有某已经被成功定义、初始化的的实例变量 4.构造函数的定义是
程序编辑与运行的基本顺序。
也就是说明:程序是按照你书写程序中的实例变量的顺序逐个进行初始化的。(类变量是优先定义与初始化的)
实例变量的相互赋值传递的是拷贝、不是引用。
相关文章推荐
- 深入理解linux下rc.d/目录文件以及程序开机自启动
- 仔细理解iOS成员变量和实例变量以及类方法和实例方法
- Python引用传递、赋值规则以及深拷贝和浅拷贝
- Python中变量赋值传递时的引用和拷贝
- OGRE启动顺序--以及官方示例程序分析
- 类加载顺序,JVM角度分析理解,类构造器方法以及实例构造器方法执行顺序
- ES6 变量声明与赋值:值传递、浅拷贝与深拷贝详解
- Python中实现变量赋值传递时的引用和拷贝方法
- JAVA final 、super 关键字以及继承关系中父类与子类实例变量初始化的 理解
- java中实例变量、类变量以及构造方法的加载顺序
- 用shell编写的简单密码加密程序,涉及到ASCII与字符的相互转换,以及命令结果输出到变量
- 构造函数初始化、static代码块初始化、成员变量初始化、以及在子父类中混合的执行顺序实例
- ES6 变量声明与赋值:值传递、浅拷贝与深拷贝
- C++控制台程序 启动 控制台程序(以及命令行参数传递)
- >02 (协议代理)、自定义视图、程序执行顺序(iOS程序启动流程 )、视图控制器、(MVC的理解)
- 用shell编写的简单密码加密程序,涉及到ASCII与字符的相互转换,以及命令结果输出到变量
- 深入理解linux下rc.d/目录文件以及程序开机自启动
- iOS 程序启动的顺序
- 理解程序调用以及由此引出的缓冲区攻击问题
- [Sqlite]-->嵌入式数据库事务理解以及实例操作