java - 在Java中,为什么有一个没有关键字的代码块,只有大括号

标签 java design-patterns

我正在重构一些继承的代码,但被设计决策难住了,无法找出合适的术语来谷歌搜索。我的前任会使用这样的 block :

public class ChildClass extends ParentClass {
    {
        inheritedVar = "someVal";
    }

    public ChildClass(){ /* constructor exists */ }
    // rest of code
}

声明没有关键字的代码块有什么意义?我不相信它的行为不像静态 block 。它是在构造函数中设置的替代方法吗?如果正在使用工厂(在这种情况下不是),这会产生一些影响吗?我在 this happening in C 上找到了一个相关的帖子。但推理(范围和变量声明)似乎与 Java 无关。

任何关于“为什么”的想法或想法将不胜感激。重新考虑这一点很容易,我现在只是好奇。

最佳答案

这是一个初始化 block 。 (与静态初始化 block 相关)请参阅本页上的初始化实例成员:

http://download.oracle.com/javase/tutorial/java/javaOO/initial.html

它是构造函数的替代方案。当提供多个重载的构造函数作为共享代码的一种方式时,您可以使用它。

然而,就我个人而言,我发现让构造函数调用命名初始化方法比依赖匿名代码块要清楚得多。虽然,编译器确实将初始化程序 block 复制到幕后的所有构造函数,但您可能会争辩说,性能提升类似于内联方法声明。

关于java - 在Java中,为什么有一个没有关键字的代码块,只有大括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4441275/

相关文章:

php - 使用 Javascript 和 PHP 的设计模式

java - 32 位 int 移动了不在范围内的量

java - 按下按键和播放器动画发生之间的延迟(KeyListener,Java)

java - 正则表达式的多重匹配?

design-patterns - 策略模式应该是无状态的吗?

Java Non-Blocking and Asynchronous IO with NIO & NIO.2 (JSR203) - Reactor/Proactor 实现

java - 如何用前导零写入 csv?

java - 从分隔字符串创建字符串数组。

c# - 什么更好?枚举还是类型检查?

ios - 初始化中隐式解包的可选值 - Swift