Java 程序初始化顺序

网友投稿 451 2022-09-04


Java 程序初始化顺序

java程序的初始化一般遵循三个原则(优先级依次递减):

1,静态对象(变量)优先于非静态对象(变量)初始化,其中,静态对象(变量)只初始化一次,而非静态对象(HepFTeIS变量)可能会初始化很多次。2,父类优先于子类进行初始化。3,按照成员变量的定义顺序进行初始化。即使变量定义散布于方法定义之中,它们依然在任何方法被调用之前先初始化。

Java程序初始化工作可以在许多不同的代码块中完成(例如静态代码块,构造函数等),它们的执行顺序如下:

父类静态变量父类静态代码块子类静态变量子类静态代码块父类非静态变量父类非静态代码块HepFTeIS父类构造函数子类非静态变量子类非静态代码块子类构造函数。

下面给出一个不同模块初始化时执行顺序的一个例子:

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

怎么样,运行结果是否HepFTeIS与你的结果一致呢?

最后,我们再来看一道面试真题:

下列代码运行结果是什么?http://

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

在面试中出现的执行顺序的问题,无非也就是把上面的代码再换几个形式,但,万变不离其宗,只要掌握它的执行顺序的规律,所有问题就都可以迎刃而解了


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:multiprocessing:这样做才能重复利用 Python 的多核(use_multiprocessing)
下一篇:13 个提高数据分析效率的 Pandas 技巧(13pro和13promax区别)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~