Java中构造函数、构造代码块、静态代码块等的执行顺序问题
2014-04-16 14:41
651 查看
//验证一个有父类的java对象的初始化顺序
class InitFu{
public static String staticFuField = "父类静态变量";
public String field="父类成员变量";
public int f;
static{
System.out.println(staticFuField);
System.out.println("父类静态初始化块");
}// 静态初始化块
{
System.out.println("父类成员变量默认值:"+f);
System.out.println(field);
System.out.println("父类构造代码块");
}// 初始化块
InitFu(){
System.out.println("Fu类初始化");
}
}
public class InitStatic extends InitFu
{
public static String staticField = "子类静态变量";// 静态变量
public String field = "子类成员变量";// 变量
public int z;
static{
System.out.println(staticField);
System.out.println("子类静态初始化块1,位置在前");
}// 静态初始化块
{
System.out.println("子类成员变量还是默认值:"+z);
System.out.println(field);
System.out.println("子类构造代码块1,位置在前");
}// 初始化块
static{
System.out.println("子类静态初始化块2,位置在后");
}// 静态初始化块
public InitStatic() {
System.out.println("子类构造函数");
}// 构造函数
public static void main(String[] args) {
new InitStatic();
}
{
//System.out.println(field);
System.out.println("子类构造代码块2,位置在后");
}// 初始化块
}
运行结果是:
父类静态变量
父类静态初始化块
子类静态变量
子类静态初始化块1,位置在前
子类静态初始化块2,位置在后
父类成员变量默认值:0
父类成员变量
父类构造代码块
Fu类初始化
子类成员变量还是默认值:0
子类成员变量
子类构造代码块1,位置在前
子类构造代码块2,位置在后
子类构造函数
class InitFu{
public static String staticFuField = "父类静态变量";
public String field="父类成员变量";
public int f;
static{
System.out.println(staticFuField);
System.out.println("父类静态初始化块");
}// 静态初始化块
{
System.out.println("父类成员变量默认值:"+f);
System.out.println(field);
System.out.println("父类构造代码块");
}// 初始化块
InitFu(){
System.out.println("Fu类初始化");
}
}
public class InitStatic extends InitFu
{
public static String staticField = "子类静态变量";// 静态变量
public String field = "子类成员变量";// 变量
public int z;
static{
System.out.println(staticField);
System.out.println("子类静态初始化块1,位置在前");
}// 静态初始化块
{
System.out.println("子类成员变量还是默认值:"+z);
System.out.println(field);
System.out.println("子类构造代码块1,位置在前");
}// 初始化块
static{
System.out.println("子类静态初始化块2,位置在后");
}// 静态初始化块
public InitStatic() {
System.out.println("子类构造函数");
}// 构造函数
public static void main(String[] args) {
new InitStatic();
}
{
//System.out.println(field);
System.out.println("子类构造代码块2,位置在后");
}// 初始化块
}
运行结果是:
父类静态变量
父类静态初始化块
子类静态变量
子类静态初始化块1,位置在前
子类静态初始化块2,位置在后
父类成员变量默认值:0
父类成员变量
父类构造代码块
Fu类初始化
子类成员变量还是默认值:0
子类成员变量
子类构造代码块1,位置在前
子类构造代码块2,位置在后
子类构造函数
相关文章推荐
- Java类中子类和基类的构造代码块,静态代码块、子类构造函数,基类构造函数的执行顺序
- java静态代码块 构造代码块 构造方法的执行顺序及注意问题
- [java起步]构造函数、构造代码快、静态代码块的执行顺序
- java子类父类静态代码块 构造代码块 构造函数执行顺序
- 学习总结:java面试方法重写详解,静态代码块和构造方法执行顺序问题
- java中静态代码块 构造代码块 构造方法的执行顺序及注意问题
- 又一波 有关 java 静态代码块 代码块 构造函数执行顺序问题
- java中的静态代码块、构造代码块、构造函数执行顺序
- 【java】静态代码块,非静态代码块,构造函数 的执行顺序问题
- Java学习笔记——静态代码块,构造代码块,构造函数间的执行顺序
- 黑马程序员——java中静态代码块、构造代码块、构造函数的执行顺序以及作用
- 父类和子类静态代码块、非静态代码块、构造函数(方法)执行的先后顺序问题
- java:普通代码块,构造代码块,静态代码块区别及其执行顺序
- java静态代码块、初始化块和构造方法的执行顺序
- 黑马程序员——Java基础---静态代码块和构造方法执行顺序
- 构造函数,静态代码块,构造代码块与方法的执行顺序
- 静态代码块、构造代码块和构造函数执行顺序
- java静态代码块、初始化块和构造方法的执行顺序
- Java代码执行顺序(静态变量,非静态变量,静态代码块,代码块,构造函数)加载顺序
- Java普通代码块,静态代码块,构造代码块在子父类的执行顺序