2015-06-25 35 views
0

我通常会避免这样做,但我偶尔偶尔会遇到一些代码示例,我想知道。在其声明中初始化一个变量会在每次调用它时重新创建一个变量?

比如你有这样的:

private Object obj; 

public void someMethod() { 
    obj = new Object(); 
} 

,因此只当someMethod()被调用的对象将被初始化。

但是,如果变量声明如下:

private Object obj = new Object(); 

后来当我使用obj变量的地方,将是种类的声明使创建新实例每次它被引用?

+0

使用构造函数,而不是 – Hiru

+0

我相信这样当调用构造函数变量将被自动初始化。 – Dragondraikk

+0

可以说这个类中没有构造函数 – Borislav

回答

1

如果字段有一个初始化语句,将与该语句的准确值后,当创建实例初始化。换句话说,当你实例化一个类时,它的实例字段初始化程序和初始化程序块会被运行,然后执行构造函数体。

访问一个字段不触发其字段初始化语句再次(如果事件有一个)。

+0

解释简单直接,谢谢 – Borislav

0

您使用(惊喜)'new'关键字创建一个新实例。 'new Object()'将调用Object()的构造函数并返回Object的新实例。对于所有(非抽象)类,即使没有显式构造函数的类都是如此,因为每个类都有一个默认构造函数。

+0

,所以它只会在声明ONCE时被初始化,而不是在以后只在代码中的某个地方被引用? – Borislav

+1

@Borislav声明'private Object obj'不创建实例。它只是声明一个变量'obj',它准备好保存对'Object'类型的对象的引用。该实例仅在您使用'new'关键字实例化对象并将其分配给您的引用变量后才会创建。然后您可以自由地使用您的变量来操作该对象。 – BoDidely

+0

我仍然不明白在执行这一行时会创建多少次'obj'实例 - “private Object obj = new Object();” – Borislav

相关问题