静态代码块、构造代码块以及构造函数执行顺序实验

第一个例子:

public class StaticDemo {
    {
        System.out.println("{} 代码块");
    }
    static{
        System.out.println("static 代码块");
    }   
   public static void main(String[] args) {
        
    }
}

结果:

static 代码块

结论:

类的加载会执行static代码块,不会执行{}代码块。


第二个例子:

public class StaticDemo2 {
    
    {
        System.out.println("{} 代码块");
    }
    
    static{
        System.out.println("static 代码块");
    }
    
    public static void main(String[] args) {
        new StaticDemo2();
    }

}

结果:

static 代码块
{} 代码块

 结论:

 new一个类的实例,会先执行static代码块,再执行{}代码块。


第三个例子:

<span style="font-size:14px;">public class StaticDemo3 { 
  public StaticDemo3(){
        System.out.println("构造函数");
    }
 
    {
        System.out.println("{} 代码块");
    }
    static{
        System.out.println("static 代码块");
    }
    
    public static void main(String[] args) {
        new StaticDemo3();
    }

}</span>

结果:

static 代码块
{} 代码块
构造函数

结论:

new一个类的实例,会先执行static代码块,再执行{}代码块,最后执行构造函数。


第四个例子:

<span style="font-size:14px;">public class StaticDemo4 {
    
  public StaticDemo4(){
        System.out.println("构造函数");
    }
 
    {
        System.out.println("{} 代码块");
    }
    static{
        System.out.println("static 代码块");
    }
    
    public static void main(String[] args) {
        new StaticDemo4();
        new StaticDemo4();
    }

}</span>

结果:

static 代码块
{} 代码块
构造函数
{} 代码块
构造函数

 总结:

static{}代码块,会在类初次被加载的时候被执行一次。{}代码块和构造函数一样,每次new一个对象都会被执行。

 

注:当有多个带不同参数的构造函数需要执行相同的初始化代码,可以将这些代码提起出来放在{}代码块中。



你可能感兴趣的:(java)