【问题标题】:Curly braces only method [duplicate]仅大括号方法[重复]
【发布时间】:2017-09-10 17:03:52
【问题描述】:

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

{
    // Do something
}

我还注意到它在static-block 之后但在构造函数之前自动执行。虽然超类的构造函数之前已经执行过了。

这个订单有什么具体原因吗?

这是我发现执行顺序的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

【问题讨论】:

标签: java curly-braces order-of-execution


【解决方案1】:

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

【讨论】:

  • 我真的见过它用过一次:在一个很长的创建 UI 组件的方法中,它被用来限制局部变量的范围。这是用另一种方法提取代码的半生不熟的方法。 IMO 的一个不好的做法。
  • 当然,我同意 Jeremy,恕我直言也是不好的做法。只是证明了我的观点,即它从未被使用过,什么时候被使用过——它不应该被使用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-17
  • 2013-05-10
  • 1970-01-01
  • 2016-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多