在Java中,can';这';在构造函数中是否为null?

在Java中,can';这';在构造函数中是否为null?,java,Java,在构造对象时,它可以为null吗 class Sample { public Sample() { if( this != null ) { // Is this check necessary anywhere in the constructor? this.doSomething(); } } .... .... } 此不会为null-但是如果您从构造函数调用非最终实例方法,您应该完整地记录它,因为任何子类构造函数都还没有运行。这意味着

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

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

不会为null-但是如果您从构造函数调用非最终实例方法,您应该完整地记录它,因为任何子类构造函数都还没有运行。这意味着如果在子类中重写
doSomething()
,它将看到该子类中声明的任何字段的默认值(其中默认值是类型的默认值,而不是变量初始值设定项可能显示的值)。基本上,如果可能的话,避免在构造函数中调用非最终实例方法是值得的。

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

不,
这个
在Java的构造函数中永远不能为
null

事实上,
这个
在Java中永远不可能是
null
。任何地方


在Java中的任何给定点上,您要么处于对象上下文中,可以访问非
null
this
,要么处于静态上下文中,根本无法访问
this
,但它决不能是
null

,我会这样做
s/virtual/non-final,non-private,non-static/
。“virtual”在Java语言中并不是一个常见的术语。我想这可能是KrishnarajIt无法完全理解的,但是调用在子类中重新定义的工厂方法来返回一个重新定义的对象是有意义的。@Angel:这可能有意义的,但需要记录@约阿希姆:编辑,虽然我希望它会变得更普遍:)谁在没有明显理由的情况下投票否决了这个问题?(又是+1…但仍然是-1)——@Angel:我只是猜测,但可能是因为它不一致。例如,它没有解释标题与问题的确切关系。我想我应该在标题中添加描述,并在描述中添加互动程序作为示例:)…那么,在main()中调用新的子类()时是否会出现问题?@MatX Yes。您可以复制和粘贴代码,编译代码并亲自尝试。