构造函数及其成员变量初始化顺序详解
来源:互联网 发布:王小波的书 知乎 编辑:程序博客网 时间:2024/05/16 09:30
package demo;/** * * @author Administrator *think in java the forth edition * */public class ConstractInit extends PortableLunch{private Meal m=new Meal();private Cheese cheese=new Cheese();private Bread b=new Bread();public ConstractInit(){/* * 1.在任何事物发生之前,将分配给对象的存储空间初始化成二进制的0 * 2.调用构造方法时,默认会调用父类的构造方法,此时成员变量还未初始化,此步骤会一直递归调用父类的构造方法, * 直到根基类(Bread)没有父类(所有的成员变量均为初始化) * 3. 到达根基类后,然后开始初始化成员变量,成员变量初始化完成之后,执行构造器主体, * 主体调用完成之后然后递归开始(与第一步相反方向)初始化其子类的成员变量,直到最底层的子类(此示例为ConstractInit) * 4 最底层的子类(ConstractInit)成员变量初始化完成之后,开始执行自身构造器主体 */System.out.println("ConstractInit");}public static void main(String[] args){new ConstractInit();}}class Meal{private int a=initMeal();Meal(){System.out.println("Meal");}private int initMeal(){System.out.println("Meal attribute initazlized");return 1;}}class Bread{private int b=initBread();public Bread(){System.out.println("Bread");}private int initBread(){System.out.println("Bread attribute initazlized");return 1;}}class Cheese{private int c=initCheese();public Cheese(){System.out.println("Cheese");}private int initCheese(){System.out.println("Cheese attribute initazlized");return 1;}}class Lettuce{public Lettuce(){System.out.println("Lettuce");}}class Lunch extends Meal{private int d=initLunch();public Lunch(){System.out.println("Lunch");}public int initLunch(){System.out.println("Lunch attribute initazlized");return 1;}}class PortableLunch extends Lunch{private int e=initPortableLunch();PortableLunch(){System.out.println("PortableLunch");}public int initPortableLunch(){System.out.println("PortableLunch attribute initazlized");return 1;}}
最后打印结构为:
Meal attribute initazlized
Meal
Lunch attribute initazlized
Lunch
PortableLunch attribute initazlized
PortableLunch
Meal attribute initazlized
Meal
Cheese attribute initazlized
Cheese
Bread attribute initazlized
Bread
ConstractInit
- 构造函数及其成员变量初始化顺序详解
- Java 代码块、成员变量初始化、构造函数初始化顺序
- Java初始化顺序总结及其程序执行过程图- 静态变量、静态代码块、成员变量、构造函数
- C++成员变量、构造函数的初始化顺序
- 构造函数中成员变量初始化顺序问题
- C++成员变量、构造函数的初始化顺序
- (静态)初始化块、成员变量、构造函数执行顺序
- 类的成员变量 声明顺序 决定 初始化顺序(构造函数初始化列表不影响)
- C++成员变量的初始化顺序如果不使用初始化列表初始化,在构造函数内初始化时,此时与成员变量在构造函数中的位置有关。
- C++的构造函数初始化列表初始化成员变量的顺序
- Java初始化顺序总结 - 静态变量、静态代码块、成员变量、构造函数
- Java初始化顺序总结 - 静态变量、静态代码块、成员变量、构造函数
- java静态/动态成员变量、初始化块,父类/子类构造函数执行顺序问题a静态/动态成员变量、初始化块,父类/子类构造函数执行顺序问题
- 关于类继承/初始化成员变量/构造函数/析构函数 执行顺序
- 关于类继承/初始化成员变量/构造函数/析构函数 执行顺序
- 关于类继承/初始化成员变量/构造函数/析构函数 执行顺序
- 构造函数初始化成员变量问题
- 构造函数初始化const成员变量
- 关于变量名前面加m的问题
- javascript的基本类型和引用类型
- 写给自己的几句话
- codeforces_350b
- Android 漫游之路------Android入门介绍
- 构造函数及其成员变量初始化顺序详解
- Android 性能优化方法
- poj 2186 Popular Cows
- 是否是闰年判断函数:BOOL IsLeapYear (int year)
- ubuntu 桌面學習
- 用vc写一款网络电视程序
- POJ3244(工科数学分析)
- Ubuntu用tar备份与恢复方法
- 黑皮的蛋糕