Java 编码约定 - 这些花括号有什么用?

标签 java coding-style

我是 JAVA 新手,我遇到了以下代码片段。

我的问题是关于 2 个 setter 调用周围的大括号。

我在编码约定 http://www.oracle.com/technetwork/java/codeconventions-150003.pdf 中找不到任何内容这解释了这个代码片段。

除了限制 setter 调用的范围(但我无法理解这样做的必要性),我想不出大括号的任何原因,有人可以解释一下大括号的目的吗? (抱歉,我没有运气找到以前的问题)

Foobar foobar = FoobarManager.getFoobar();
{
    foobar.setName("MyFoo");
    foobar.setTimestamp(timestamp);
}

最佳答案

这是一个java初始化 block ,它将在构造函数的 super 调用之后工作,您可以执行下一个代码

public class Test {
    public Test() {
        super();
        System.out.println("Hello");
    }

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

    public static void main(String[] args) {
        new Test();
    }
}

如果你检查输出,结果是:

Bye
Hello

这是因为首先将执行 super 调用,之后将执行初始化 block ,然后执行构造函数的下一行。

如果您有许多构造函数并且您想要独立于执行哪个构造函数来执行某些代码行,这会很有帮助

关于Java 编码约定 - 这些花括号有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31010329/

相关文章:

java - 重置计数器或让它增加并使用模数是否更有效

c++ - 主要功能是什么?

java - 是否有可能使 IntelliJ 显示提示更加稳健?

java - GZIPOutputStream 是否已知会在压缩过程中丢失数据?

c++ - 是否有良好/广泛采用的 c++ 模板编码约定/标准?

java - JUnit 5 - 为整个测试套件提供设置和拆卸

java - primefaces Activity eventMove 日程安排中的日期错误

javascript - 有没有更优雅的方式来编写这个循环?

java - 用于使用 SOAP - WSDL 的命令行 java 客户端

java - prometheus 端点中缺少 Spring Boot Webclient 指标