java中成员变量、代码块、构造函数执行顺序
来源:互联网 发布:java hadoop 开发 编辑:程序博客网 时间:2024/05/17 03:53
1、java虚拟机运行程序,首先需要装载类,安装现装载父类,初始化父类的静态代码块和静态成员变量
再load子类。初始化子类静态代码块和成员变量
2、load完毕父类与子类后,从main函数入口执行程序,先输出,接着new实例化Beetle类,则先实例化父类Insect,实例化父类时,先初始化非静态成员变量和非静态代码块,接着执行父类构造方法
再实例化子类,实例化子类时,先初始化非静态成员变量和非静态代码块,接着执行子类构造方法。
package it.xiangnan.test;
public class Beetle extends Insect {
private int k = printInit("Beetle.k initialized");
public Beetle() {
System.out.println("k=" + k);
System.out.println("j=" + j);
}
private static int x2 = printInit("static Beetle.x2 initialized");
public static void main(String[] args) {
System.out.println("Beetle constructor");
Beetle b = new Beetle();
}
}
class Insect {
private int i = 9;
protected int j;
Insect() {
System.out.println("i=" + i + ",j=" + j);
j = 39;
}
private static int x1 = printInit("static Insect.x1 intialized");
static int printInit(String s) {
System.out.println(s);
return 47;
}
}
函数从main处执行
Beetle有父类Insect,先初始化父类的静态成员变量x1,再初始化Beelte类静态成员变量x2
转而从main处执行,输出Beetle constructor,由于紧接着实例化Bettle类,该类有父类Insect,则先执行父类构造函数,在执行子类构造函数
static Insect.x1 initialized 1、父类Insect静态成员变量初始化值为47
static Beetle.x2 initialized 2、Beetle类的静态成员变量x2初始化值为47
Beetle constructor 3、输出
i=9,j=0 4、执行Beetle的父类Insect的默认构造函数
Beetle.k initialized 5、执行Beetle类的默认构造函数,输出k值之前,调用printInit方法输出该句话,并初始化k值为47
k=47 6、分别输出k、j的值
j=39
再load子类。初始化子类静态代码块和成员变量
2、load完毕父类与子类后,从main函数入口执行程序,先输出,接着new实例化Beetle类,则先实例化父类Insect,实例化父类时,先初始化非静态成员变量和非静态代码块,接着执行父类构造方法
再实例化子类,实例化子类时,先初始化非静态成员变量和非静态代码块,接着执行子类构造方法。
package it.xiangnan.test;
public class Beetle extends Insect {
private int k = printInit("Beetle.k initialized");
public Beetle() {
System.out.println("k=" + k);
System.out.println("j=" + j);
}
private static int x2 = printInit("static Beetle.x2 initialized");
public static void main(String[] args) {
System.out.println("Beetle constructor");
Beetle b = new Beetle();
}
}
class Insect {
private int i = 9;
protected int j;
Insect() {
System.out.println("i=" + i + ",j=" + j);
j = 39;
}
private static int x1 = printInit("static Insect.x1 intialized");
static int printInit(String s) {
System.out.println(s);
return 47;
}
}
函数从main处执行
Beetle有父类Insect,先初始化父类的静态成员变量x1,再初始化Beelte类静态成员变量x2
转而从main处执行,输出Beetle constructor,由于紧接着实例化Bettle类,该类有父类Insect,则先执行父类构造函数,在执行子类构造函数
static Insect.x1 initialized 1、父类Insect静态成员变量初始化值为47
static Beetle.x2 initialized 2、Beetle类的静态成员变量x2初始化值为47
Beetle constructor 3、输出
i=9,j=0 4、执行Beetle的父类Insect的默认构造函数
Beetle.k initialized 5、执行Beetle类的默认构造函数,输出k值之前,调用printInit方法输出该句话,并初始化k值为47
k=47 6、分别输出k、j的值
j=39
0 0
- java中成员变量、代码块、构造函数执行顺序
- Java静态变量 静态代码块 主函数 成员变量 构造代码块 构造函数的执行顺序
- java 静态代码块、静态变量、成员变量、构造代码块、构造方法的执行顺序
- Java 代码块、成员变量初始化、构造函数初始化顺序
- java中变量、代码块、构造执行顺序
- Java初始化顺序总结及其程序执行过程图- 静态变量、静态代码块、成员变量、构造函数
- Java父类与子类中静态代码块 实例代码块 静态变量 实例变量 构造函数执行顺序
- Java中静态块,静态成员变量,构造块,普通成员变量,构造方法的执行顺序
- Java普通代码块,构造代码块,静态代码块,成员变量的执行顺序的代码实例
- 成员变量赋值时机与构造代码块执行顺序
- static代码块、成员变量初始化、构造方法执行顺序
- java 中代码块、构造函数的执行顺序
- java静态/动态成员变量、初始化块,父类/子类构造函数执行顺序问题a静态/动态成员变量、初始化块,父类/子类构造函数执行顺序问题
- (静态)初始化块、成员变量、构造函数执行顺序
- Java代码执行顺序(初始化块-成员变量(static、fianl)-构造)
- Java中构造函数、构造代码块、静态代码块等的执行顺序问题
- Java中静态代码块、构造代码块构造函数的执行顺序
- Java初始化顺序总结 - 静态变量、静态代码块、成员变量、构造函数
- Makefile编写中参数说明
- PHP入门知识和PHP开发的AppServ教程
- thinkphp3.1.2开发排错一例——开启调试模式以关闭缓存
- iOS Reverse Engineering Resources
- VC枚举本地所有的打印机
- java中成员变量、代码块、构造函数执行顺序
- DSM 的下载中心和root
- UML-顺序图(2)
- hdu 1015 Safecracker 枚举
- 第六周作业(课本例题)
- 编程小题
- SDOJ 2138图结构练习——BFSDFS——判断可达性(图的深度优先遍历)
- Block 1:什么是Blocks
- 滑动菜单栏(一)开源项目SlidingMenu的使用