Java 程序初始化顺序
Java编程
2022-01-13
- 1,静态对象(变量)优先于非静态对象(变量)初始化,其中,静态对象(变量)只初始化一次,而非静态对象(变量)可能会初始化很多次。
- 2,父类优先于子类进行初始化。
- 3,按照成员变量的定义顺序进行初始化。即使变量定义散布于方法定义之中,它们依然在任何方法被调用之前先初始化。
Java程序初始化工作可以在许多不同的代码块中完成(例如静态代码块,构造函数等),它们的执行顺序如下:
- 父类静态变量
- 父类静态代码块
- 子类静态变量
- 子类静态代码块
- 父类非静态变量
- 父类非静态代码块
- 父类构造函数
- 子类非静态变量
- 子类非静态代码块
- 子类构造函数。
下面给出一个不同模块初始化时执行顺序的一个例子:
class Base{ static { System.out.println("Base static block"); } public Base(){ System.out.println("Base constructor"); } public class Derived extends Base{ static{ System.out.println("Drevied static block"); } { System.out.println("Drevied block"); } public Derived(){ System.out.println("Drevied constructor"); } public static void main(String args[]){ new Derived(); } }
先自己利用上面给出的执行顺序进行判断:
程序的运行结果为:
Base static block
Derived static block
Base block
Base constructor
Derived block
Derived constructor
怎么样,运行结果是否与你的结果一致呢?
最后,我们再来看一道面试真题:
下列代码运行结果是什么?
class B extends Object{ static{ System.out.println("Load B1"); } public B(){ System.out.println("Create B"); } static{ System.out.println("Load B2"); } } class A extends B{ static{ System.out.println("Load A"); } public A(){ System.out.println("Create A"); } } public class Testclass{ public static void main(String[ ] args){ new A(); } }
运行结果是:
Load B1 LoadB2 Load A Create B Create A
在面试中出现的执行顺序的问题,无非也就是把上面的代码再换几个形式,但,万变不离其宗,只要掌握它的执行顺序的规律,所有问题就都可以迎刃而解了
到此这篇关于Java 程序初始化顺序的文章就介绍到这了,更多相关Java程序初始化顺序内容请搜索www.580doc.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.580doc.com!
上一篇:没有了下一篇:基于OpenCV与JVM实现矩阵处理图像
相关文章
- 日期:2021-12-27解决引用slf4j中Logger.info只打印出文字没有数据的问题
- 日期:2022-01-10java实现平面山脉模型
- 日期:2022-01-11spring boot写java web和接口
- 日期:2022-01-04IDEA使用JDBC安装配置jar包连接MySQL数据库
- 日期:2021-12-19Spring Boot Jar 包部署脚本的实例讲解
- 日期:2021-12-21HashSet如何保证元素不重复(面试必问)