java对象的初始化顺序

    xiaoxiao2025-06-06  13

    今天又重新稳固一下一些基础的东西,遇到一个有趣的问题,java的对象的初始化顺序?

    https://www.cnblogs.com/LoganChen/p/6391532.html  第20题

    1 类加载之后,按从上到下(从父类到子类)执行被static修饰的语句;

    2 当static语句执行完之后,再执行main方法;

    3如果有语句new了自身的对象,将从上到下执行构造代码块、构造器(两者可以说绑定在一起)。

    例子:

    class HelloA { public HelloA() { System.out.println("HelloA"); } { System.out.println("I'm A class"); } static { System.out.println("static A"); } } public class HelloB extends HelloA { public HelloB() { System.out.println("HelloB"); } { System.out.println("I'm B class"); } static { System.out.println("static B"); } public static void main(String[] args) { System.out.println("-------main start-------"); new HelloB(); new HelloB(); System.out.println("-------main end-------"); } }

    输出:

    static A static B -------main start------- I'm A class HelloA I'm B class HelloB I'm A class HelloA I'm B class HelloB -------main end-------

    哈哈,那这个呢?会不会跟上面结果一样,这里主要是main不是在HelloB 哪里!这里我运行了一下,结果跟上面不一样,但是还是符合上面说的3点纪要哪里,所以面试笔试题的时候,需要看清楚奥。

    public class test { public static void main(String[] args){ System.out.println("-------main start-------"); new HelloB(); new HelloB(); System.out.println("-------main end-------"); } }

     结果:

    -------main start------- static A static B I'm A class HelloA I'm B class HelloB I'm A class HelloA I'm B class HelloB -------main end-------

     

    最新回复(0)