在构造对象时,它可以为null吗?
class Sample {
public Sample() {
if( this != null ) { // Is this check necessary anywhere in the constructor?
this.doSomething();
}
}
....
....
}
答案 0 :(得分:4)
this
不会为null - 但如果从构造函数中调用非最终实例方法,则应该非常彻底地记录,因为任何子类构造函数都不会已经运行了。这意味着如果在子类中重写doSomething()
,它将看到该子类中声明的任何字段的默认值(其中默认值是类型的默认值,不是无论变量如何初始化程序可能会显示)。基本上,如果可能的话,尽量避免在构造函数中调用非最终实例方法。
答案 1 :(得分:3)
不,this
在Java的构造函数中不可能是null
。
事实上,this
在Java中不可能是null
。任何地方。
在Java中的任何给定点,您都处于对象上下文中并且可以访问非null
this
,或者您处于静态上下文中且无法访问{{1}完全没有this
。
答案 2 :(得分:1)
this
引用在Java中永远不是null
,也不在构造函数中。但是,调用可能在构造函数的子类中重写的非final方法通常不是一个好主意,因为该对象的子类部分尚未初始化。
一个例子:
class Superclass {
public Superclass() {
// NOTE: This will print null instead of "Jack", because the subclass constructor has not yet been run!
printName();
}
public void printName() {
System.out.println("Superclass method");
}
}
public class Subclass extends Superclass {
private final String name;
public Subclass() {
name = "Jack";
}
@Override
public void printName() {
System.out.println(name);
}
public static void main(String[] args) {
new Subclass();
}
}