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/54598241/

相关文章:

android - "android activity lifecycle"是否使用模板方法模式?

python - 类函数中 pre-do 的设计模式是什么

java - Android createChooser出现在Activity前面

java - 如何在 BatchStage Hazelcast Jet 上应用 python

java - 为什么需要关闭 'finally' 内的文件并仍然将其嵌入到 'try/catch' block 中?

java - Kitkat HCE(NFC) 设备能否与另一台 Kitkat HCE(NFC) 设备通信

Java Wrapper 枚举开关多态性

java - 从对象转换为枚举

c# - 将条件替换为多态重构还是类似的?

C++ 模块架构,模块循环依赖