- 您主要在哪里使用初始化块?
- 您可以使用它们为静态实例变量赋值吗?
- 这与使用构造函数分配有什么不同?
- 我的书说初始化块是在“类加载”时执行的。加载类是什么意思?
附加问题
哪个更好?
class {static final instance-variable = val}
or
class {static final instance-variable; static {instance-variable=val}}
初始化块总是被调用不管您想要使用的构造函数。因此,如果相关类具有多个构造函数,并且您希望无论使用哪个构造函数都运行一些代码,那么请使用初始化块。
但是,当用于分配默认值时,我只是直接分配它们。如果他们是偶数常量,然后我会添加final
也到修饰符列表。
private static final String VAL1 = "VALUE";
Update由于您彻底改变了问题,因此这是一个新的答案:
1)你主要在哪里使用初始化块?
无论使用什么构造函数都执行一些代码。
2)你能用它们给静态实例变量赋值吗?
你需要一个static
初始化块。
private static final String FOO;
static {
FOO = "bar";
}
这样做的好处是您可以做的不仅仅是分配一个值。例如。从某种方法获取它并处理异常:
static {
try {
FOO = getItSomehow();
} catch (Exception e) {
throw new ExceptionInInitializerError(e);
}
}
3)这与使用构造函数赋值有何不同?
无论使用什么构造函数,它总是被分配。
4)我的书说初始化块是在“类加载”时执行的。加载类是什么意思?
这本书实际上讲的是一个static初始化块。当您在代码中第一次引用某个类时,通常会加载该类。您也可以通过以下方式强制加载Class#forName()
(就像您对 JDBC 驱动程序所做的那样)。我之前发布过一个包含更多示例和解释的答案here https://stackoverflow.com/questions/1893274/doubt-in-java-basics/1893321#1893321.
希望这可以帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)