Java-程序初始化的顺序

Java-程序初始化的顺序,第1张

Java-程序初始化的顺序

在Java语言中,当实例化对象时,对象所在类的所有成员变量首先要进行初始化,只有当所有的类成员完成了初始化之后,才会调用对象所在类的构造函数创建对象。

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

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

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

若有错误,请尽情批评指正!!!

若对您有帮助,请给予三连支持!!!!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/5703217.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存