我通常会避免这样做,但我偶尔在一些代码示例中偶然发现这一点,我想知道。
例如,你有这个:
private Object obj;
public void someMethod() {
obj = new Object();
}
因此,只有在调用someMethod()
时才会初始化对象。
但如果变量声明如下:
private Object obj = new Object();
稍后当我在某处使用obj
变量时,这种声明是否会在每次引用时创建一个新实例?
答案 0 :(得分:1)
如果一个字段有一个初始化语句,那么在创建实例时,它将使用该语句的值恰好初始化一次。换句话说,当您实例化一个类时,将运行其实例字段初始值设定项和初始化程序块,然后执行构造函数体。
访问字段不会再触发其字段初始化语句(如果事件有一个)。
答案 1 :(得分:0)
您使用(惊喜)“新”'创建新实例。关键词。 ' new Object()'将调用Object()的构造函数并返回Object的新实例。对于所有(非抽象)类,即使没有显式构造函数的类也是如此,因为每个类都有一个默认构造函数。