Java初始化顺序

不new对象时

public class HelloA {

       public HelloA(){//构造函数

                              System.out.println("A的构造函数"); }

                        {//构造代码块

                              System.out.println("A的构造代码块"); }

               static {//静态代码块

                              System.out.println("A的静态代码块"); }

           public static void main(String[] args) {

 

  }

}

运行结果: A的静态代码块

 

 

new一个对象时

public class HelloA {
    public HelloA(){//构造函数
        System.out.println("A的构造函数");    
    }
    {//构造代码块
        System.out.println("A的构造代码块");    
    }
    static {//静态代码块
        System.out.println("A的静态代码块");        
    }
    public static void main(String[] args) {
        HelloA a=new HelloA();    
    }
}

运行结果:
A的静态代码块
A的构造代码块
A的构造函数


new二个对象时

public class HelloA {
    public HelloA(){//构造函数
        System.out.println("A的构造函数");    
    }
    {//构造代码块
        System.out.println("A的构造代码块");    
    }
    static {//静态代码块
        System.out.println("A的静态代码块");        
    }
    public static void main(String[] args) {
        HelloA a=new HelloA();
        HelloA b=new HelloA();
    }

}

运行结果:
A的静态代码块
A的构造代码块
A的构造函数
A的构造代码块
A的构造函数

 

 

 

对于一个类而言,按照如下顺序执行:

 

  1. 执行静态代码块
  2. 执行构造代码块
  3. 执行构造函数

 

对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是(静态变量、静态初始化块)>(变量、初始化块)>构造器。

 

 

对于继承情况

当涉及到继承时,按照如下顺序执行:

  1. 执行父类的静态代码块,并初始化父类静态成员变量
  2. 执行子类的静态代码块,并初始化子类静态成员变量
  3. 执行父类的构造代码块,执行父类的构造函数,并初始化父类普通成员变量
  4. 执行子类的构造代码块, 执行子类的构造函数,并初始化子类普通成员变量

 

例子:

 

public class HelloA {
    public HelloA(){//构造函数
        System.out.println("A的构造函数");    
    }
    {//构造代码块
        System.out.println("A的构造代码块");    
    }
    static {//静态代码块
        System.out.println("A的静态代码块");        
    }
}
public class HelloB extends HelloA{
    public HelloB(){//构造函数
        System.out.println("B的构造函数");    
    }
    {//构造代码块
        System.out.println("B的构造代码块");    
    }
    static {//静态代码块
        System.out.println("B的静态代码块");        
    }
    public static void main(String[] args) {
        HelloB b=new HelloB();        
    }
}

 

  

 

运行结果: A的静态代码块 B的静态代码块 A的构造代码块 A的构造函数 B的构造代码块 B的构造函数

 

posted @ 2022-07-13 16:01  烟笼寒山  阅读(52)  评论(0)    收藏  举报