博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 进阶——类成员初始化顺序
阅读量:4292 次
发布时间:2019-05-27

本文共 1075 字,大约阅读时间需要 3 分钟。

首先看下这段测试代码

public class ClassLoader { public static void main(String[] args) { // 3.第四步,new一个类,但在new之前要处理匿名代码块

new ClassLoader();

} // 1.第二步,静态变量和静态代码块的加载顺序由编写先后决定

static int sNum = 4;

// 2.第三步,静态块,然后执行静态代码块,因为有输出,故打印

static {

System.out.println("静态方法块执行");

} // 4.第五步,按照顺序加载匿名代码块,代码块中有打印

{

System.out.println("静态变量 =" + sNum);

sNum += 3;

System.out.println("类方法快执行");

System.out.println("静态变量 =" + sNum);

} // 5.第六步,按照顺序加载变量

int mNum = 5;

// 6.第七步,按照顺序打印

{

System.out.println("成员方法块执行");

} // 7.第八步,最后加载构造函数,完成对象的建立

ClassLoader() {

System.out.println("成员变量 =" + mNum);

System.out.println("构造器执行");

} // 8.静态方法,调用的时候才加载

static void run()

{

System.out.println("static function");

} // 8.内部类,调用的时候才加载

static class Interior {

static {

System.out.println("Interior");

}

}

}

看下输出结果

Java 进阶——类成员初始化顺序

输出结果

输出结果表明,程序的执行顺序为:

如果类还没有被加载:

1、先执行父类的静态代码块和静态变量初始化,并且静态代码块和静态变量的执行顺序只跟代码中出现的顺序有关。

2、执行子类的静态代码块和静态变量初始化。

3、执行父类的实例变量初始化

4、执行父类的构造函数

5、执行子类的实例变量初始化

6、执行子类的构造函数

如果类已经被加载:

则静态代码块和静态变量就不用重复执行,再创建类对象时,只执行与实例相关的变量初始化和构造方法。

文/walid(简书作者)

原文链接:http://www.jianshu.com/p/8a9349552252

转载地址:http://jhggi.baihongyu.com/

你可能感兴趣的文章
netty源码分析之-开发过程中重要事项分析(7)
查看>>
Sublime Text3插件详解
查看>>
netty源码分析之-ByteBuf详解(8)
查看>>
javascript函数定义三种方式详解
查看>>
javascript中this关键字详解
查看>>
javascript关于call与apply方法详解
查看>>
netty源码分析之-ReferenceCounted详解(9)
查看>>
javascript闭包详解
查看>>
javascript类的创建与实例对象
查看>>
javascript原型详解(1)
查看>>
netty源码分析之-处理器详解(9)
查看>>
javascript原型对象存在的问题(3)
查看>>
javascript原型继承(1)
查看>>
javascript原型继承-实现extjs底层继承(2)
查看>>
javascript设计模式-建立接口的方式(1)
查看>>
javascript设计模式-单体singleton模式(2)
查看>>
javascript设计模式-链式编程(3)
查看>>
大型高并发与高可用缓存架构总结
查看>>
javascript设计模式-工厂模式(4)
查看>>
javascript设计模式-组合模式(6)
查看>>