2015-05-21 57 views
2

如果我使用此关键字调用同一类的另一个构造函数。它会创建两个对象吗?构造函数链会在Java中创建多个对象吗?

如果是这样,哪个对象会在下面的例子中活跃:

Class Sample { 
    int a; 
    String b; 

    Sample() { 
     this("Hello"); 
     a=10; 
    } 

    Sample(String temp) { 
     b = temp; 
    }  
} 

我想知道构造函数链的行为。请解释它是如何工作的?

回答

8

不,构造函数链不会创建额外的实例,它只是执行链式构造函数的逻辑,允许您重用其代码。

+0

感谢您的输入。所以,这意味着,它与调用另一种方法相同。 – Raashith

+1

@ user3232754这不完全相同。对其他构造函数的调用必须是构造函数中的第一行,而另一个构造函数隐式调用超类的构造函数。另外,您只能从构造函数中进行此调用。如果它像其他方法一样,可以用任何方法调用它。 – Eran

2

没有this("Hello");这里会打电话给Sample(String temp)构造,它不会产生另一个对象。

+0

谢谢了:) – Raashith

0

正如其他人提到你只会得到一个对象,每个构造函数都初始化同一个对象。

最好看自己:

public class Sample { 
    int a; 
    String b; 

    Sample() { 
     this("Hello"); 
     a=10; 
     System.out.println("B: "+ hashCode()); 
    } 

    Sample(String temp) { 
     b = temp; 
     System.out.println("A: "+ hashCode()); 
    } 

    public static void main(String[] args) { 
     new Sample(); 
    } 

} 

。请注意,不能完全初始化调用对象的实例方法可能会造成问题,如果您尝试访问未初始化的字段,以便谨慎行事。

相关问题