有谁知道为什么你可以参考static
构造函数第一行中的方法使用this()
or super()
,但不是非静态方法?
考虑以下工作:
public class TestWorking{
private A a = null;
public TestWorking(A aParam){
this.a = aParam;
}
public TestWorking(B bParam)
{
this(TestWorking.getAFromB(bParam));
}
//It works because its marked static.
private static A getAFromB(B param){
A a = new A();
a.setName(param.getName());
return a;
}
}
以及以下非工作示例:
public class TestNotWorking{
private A a = null;
public TestNotWorking(A aParam){
this.a = aParam;
}
public TestNotWorking(B bParam)
{
this(this.getAFromB(bParam));
}
//This does not work. WHY???
private A getAFromB(B param){
A a = new A();
a.setName(param.getName());
return a;
}
}
非静态方法是实例方法。这只能在现有实例中访问,并且当您在构造函数中时实例还不存在(它仍在构造中)。
为什么会这样呢?由于实例方法可以访问实例(非静态)字段,这些字段在不同的实例中可以具有不同的值,因此在现有的已完成实例之外的其他对象上调用此类方法是没有意义的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)