我知道私有实例变量是通过其公共 getter 和 setter 方法访问的。
但是,当我借助 IDE 生成构造函数时,它会直接初始化实例变量,而不是通过其 setter 方法来初始化它们。
Q1.因此,我是否应该更改 IDE 为构造函数生成的代码,以通过它们的 setter 方法初始化这些实例变量。
Q2。如果是,那么为什么 IDE 不以这种方式生成构造函数代码?
=============================已编辑==================== ===================
你应该never从构造函数调用非最终方法。类构造函数用于初始化对象,并且在构造函数返回之前,对象不会处于一致状态。如果您的构造函数调用一个非最终方法,该方法后来被子类重写,您可能会得到奇怪的、意外的结果,因为在调用重写的方法时该对象尚未完全初始化。
考虑这个人为的例子:
class A {
private int x;
public A() {
setX(2);
}
public void setX(int x) {
this.x = x;
}
public int getX() {
return x;
}
}
class B extends A {
private int number = 10;
@Override
public void setX(int x) {
// set x to the value of number: 10
super.setX(number);
}
}
public class Test {
public static void main(String[] args) {
B b = new B();
// b.getX() should be 10, right?
System.out.println("B.getX() = " + b.getX());
}
}
该程序的输出是:
B.getX() = 0
原因是B
's number
当时成员尚未初始化setX
被调用,所以它的默认值为0
用来。
本文 http://www.informit.com/articles/article.aspx?p=20521有更彻底的解释,就像有效的Java.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)