JAVA 构造代码块和static代码块、普通代码块

构造代码块

construct code block

使用{}包裹的代码区域,这里的代码区域特指位于 类中 方法外
每次创建对象都会执行

例子:

public class HelloA {
    {
        System.out.println("构造代码块");
    }
}

作用

如果有多个构造方法(方法重载),都要执行相同的一段程序,就可以将这些代码写在构造代码块中

构造代码块 和 构造方法的执行顺序

public class HelloA {
    {
        System.out.println("构造代码块");
    }
    public HelloA(){
        System.out.println("构造方法");
    }
    public static void main(String[] args) {
        new HelloA();
        System.out.println("---");
        new HelloA();

    }
}

执行结果:

构造代码块
构造方法
---
构造代码块
构造方法

总结:

  • 先执行构造代码块,然后执行构造方法
  • 每次创建对象都会执行 构造代码块

为什么构造代码块在构造方法前执行

通过反编译.class可知,在编译时,将构造代码块的代码,放到了构造方法的最开始处

static代码块

由static关键字修饰的代码块
加载类时就会执行,且执行一次

例子:

public class HelloA {
    static{
        System.out.println("静态代码块");
    }

}

执行顺序

static代码块、构造代码块、构造方法的执行顺序

执行下面的代码,并观察打印结果

public class HelloA {
    public HelloA(){
        System.out.println("构造方法");
    }
    {
        System.out.println("构造代码块");
    }

    static {
        System.out.println("静态代码块");
    }

    public static void main(String[] args) {
        new HelloA();
        System.out.println("---");
        new HelloA();

    }
}

执行结果:

静态代码块
构造代码块
构造方法
---
构造代码块
构造方法

static代码块最开始执行,且仅执行一次
然后是构造方法执行
最后是构造方法执行

普通代码块

在条件语句、循环语句、方法 等用花括号括起来的部分。
将一部分代码组合成一个整体

public static void main(String[] args) {
    {
        int i=0;
    }
    int j=10;
}

感谢:
https://www.cnblogs.com/Heliner/p/10524699.html


原文出处:/show_1EF4rbaqehkY.html