2

为什么 Java只接受方括号方法?做什么用的?

{
    // Do something
}

我还注意到它在静态块之后但在构造函数之前自动执行。虽然之前执行过超类的构造函数。

这个订单有具体原因吗?

这是我为发现执行顺序而制作的JUnit :

public class TestClass extends TestSuperClass {

    public TestClass() {
        System.out.println("constructor");
    }

    @Test
    public void test() {
        System.out.println("test");
    }

    {
        System.out.println("brackets");
    }

    static {
        System.out.println("static");
    }
}

public class TestSuperClass {

    public TestSuperClass() {
        System.out.println("super class constructor");
    }

    {
        System.out.println("super class brackets");
    }

    static {
        System.out.println("super class static");
    }
}

作为输出,我得到:

super class static
static
super class brackets
super class constructor
brackets
constructor
test
4

1 回答 1

2

它与静态块相同,但不是静态的。因此它将按照您已经发现的顺序执行 - 在超级构造函数之后但在构造函数之前。但是,如果静态块有用,那么常规块就不那么有用了。所以它从未使用过,但它是合法的。我从未见过它被使用过,也想不出任何特定的用途,但它是有效语法的一部分。如果不是,那么静态块也不会。

于 2017-04-19T09:06:51.043 回答