在Java中,构造函数中的'this'是否可以为null?

时间:2011-09-19 11:36:50

标签: java

在构造对象时,它可以为null吗?

class Sample {
  public Sample() {
      if( this != null ) { // Is this check necessary anywhere in the constructor?
        this.doSomething();
      }
  }
 ....
 ....
}

3 个答案:

答案 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();
    }
}