为什么 Java 接受仅括号方法?是做什么用的?
{
// Do something
}
我还注意到它是在 static-block 之后自动执行的但在构造函数之前。虽然父类(super class)的构造函数是在之前执行的。
此订单有具体原因吗?
这是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
最佳答案
它与静态 block 相同,但不是静态的。因此它将按照您已经发现的顺序执行 - 在 super 构造函数之后但在构造函数之前。然而,如果静态 block 可以有用,那么常规 block 就没那么有用了。所以它从未被使用过,但它是合法的。我从未见过它的使用,也想不出任何特定的目的,但它是有效语法的一部分。如果不是,那么静态 block 也不会。
关于java - 仅花括号方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43411495/