java - 仅花括号方法

标签 java curly-braces order-of-execution

为什么 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/

相关文章:

syntax - Razor 在节中误读了脚本内的右大括号

C++ shared_ptr 释放顺序

c - 在 C 中重新排序对多个 volatile 变量的访问

java - 验证表中文本是否位于 2 个指定项目之间的最佳方法 - Selenium - Java

java - 如何检索特定短信的联系方式?

c++ - 带大括号的 std::vector init 调用复制构造函数两次

c++ - 错误 C2075 : array initialization needs curly braces

servlets - 如何在 WAR 中使用注释定义 servlet 过滤器的执行顺序

java - Spring Boot,Spring Security 与数据库链接

java - 在使用 LdapContext 的 Websphere 6.x LDAP 查询中,凭据的传输是否加密?