代码块

在Java中,使用{}括起来的代码被称为代码块。

分类

根据其位置和声明的不同,可以分为:

  1. 局部代码块:局部位置,用于限定变量的生命周期。
  2. 构造代码块:在类中的成员位置,用{}括起来的代码。每次调用构造方法执行前,都会先执行构造代码块。作用:可以把多个构造方法中的共同代码放到一起,对对象进行初始化。
  3. 静态代码块:在类中的成员位置,用{}括起来的代码,只不过它用static修饰了。作用:一般是对类进行初始化。

上结论

  • 单个类中初始化过程:
  1. 初始化静态成员变量和静态代码块(按次序)
  2. 执行main方法
  3. 初始化普通成员变量和构造代码块(按次序)
  4. 执行构造方法
  • 涉及父类和子类的初始化过程:
  1. 初始化父类中的静态成员变量和静态代码块(按次序)
  2. 初始化子类中的静态成员变量和静态代码块(按次序)
  3. 执行子类main方法
  4. 初始化父类的普通成员变量和构造代码块(按次序)
  5. 执行父类的构造方法(注意父类构造方法中的子类方法覆盖)
  6. 初始化子类的普通成员变量和构造代码块(按次序)
  7. 执行子类的构造方法

上代码

class Test {

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

    {
        System.out.println("Test 构造代码块");
    }

    public Test() {
        System.out.println("Test 构造方法");
    }

}

public class TestDemo {

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

    {
        System.out.println("TestDemo 构造代码块");
    }

    public static void main(String[] args) {
        System.out.println("TestDemo main方法");

        Test t1 = new Test();
        Test t2 = new Test();
    }

}
public class Test extends MyClass {

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

    Person person = new Person("Test");

    {
        System.out.println("Test 构造代码块");
    }

    public Test() {
        System.out.println("Test 构造方法");
    }

    public static void main(String[] args) {
        System.out.println("Test main方法");
        new Test();
    }

}

class Person {

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

    {
        System.out.println("Person 构造代码块");
    }

    public Person(String str) {
        System.out.println("Person 构造方法,参数是" + str);
    }

}

class MyClass {

    static Person person = new Person("MyClass");

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

    {
        System.out.println("MyClass 构造代码块");
    }

    public MyClass() {
        System.out.println("MyClass 构造方法");
    }

}
12-20 23:39