jav*_*y79 100
这似乎解释得很好:
在以下情况下,实例初始值设定项是实例变量初始化程序的有用替代
初始化代码必须捕获异常,或
执行无法用实例变量初始化程序表示的花哨计算.当然,您可以在构造函数中编写此类代码.
但是在具有多个构造函数的类中,您必须在每个构造函数中重复代码.使用实例初始化程序,您只需编写一次代码,无论使用何种构造函数创建对象,都将执行该代码.实例初始值设定项在匿名内部类中也很有用,它们根本不能声明任何构造函数.
yka*_*ich 20
就对象生命周期而言,没有区别.两者都在构造时调用,逻辑上初始化块可以被视为构造的一部分.
从语义上讲,初始化程序是一个很好的工具,有以下几个原因:
初始化程序可以通过将初始化逻辑保持在初始化变量旁边来提高代码可读性:
public class Universe {
public int theAnswer;
{
int SIX = 6;
int NINE = 7;
theAnswer = SIX * NINE;
}
// a bunch of other vars
}
Run Code Online (Sandbox Code Playgroud)
VS
public class Universe {
public int theAnswer;
// a bunch of other vars
public Universe() {
int SIX = 6;
int NINE = 7;
theAnswer = SIX * NINE;
// other constructor logic
}
}
Run Code Online (Sandbox Code Playgroud)
无论使用哪个构造函数,都会调用初始化程序.
初始化程序可以在匿名内部类中使用,而构造函数则不能.
| 归档时间: |
|
| 查看次数: |
21799 次 |
| 最近记录: |