我正在重新分解一些继承的代码,但被设计决定难住了,也找不出合适的术语来谷歌这一点。我的前辈会使用像这样的块:
public class ChildClass extends ParentClass {
{
inheritedVar = "someVal";
}
public ChildClass(){ /* constructor exists */ }
// rest of code
}
声明没有关键字的代码块有什么意义?它的行为不像静态块,我不相信。它是在构造函数中设置的替代方法吗?如果正在使用工厂(在本例中没有),这会有一些影响吗?我在this happening in C上找到了一个相关的帖子,但其中的推理(作用域和变量声明)似乎与Java无关。
任何关于“为什么”的想法或想法都将不胜感激。重构这一点很容易,我只是很好奇。
发布于 2010-12-15 00:14:49
它是一个初始化程序块。(与静态初始值设定项块相关)请参阅本页上的初始化实例成员:
http://download.oracle.com/javase/tutorial/java/javaOO/initial.html
它是构造函数的替代方法。您可以在提供多个重载构造函数时使用它作为共享代码的一种方式。
然而,就我个人而言,我发现让构造函数调用一个命名的初始化器方法要比依赖匿名代码块清晰得多。不过,编译器确实会在幕后将初始化程序块复制到所有构造函数中,您可能会认为这与内联方法声明类似,但性能有所提高。
发布于 2010-12-15 00:14:31
作用域。块中声明的任何变量在块之后都会超出作用域。将变量的作用域保持在最小是很有用的。
此外,如果定义匿名内部类,则将此语法用于构造函数。
https://stackoverflow.com/questions/4441275
复制相似问题