什么条件导致对象实例化返回null?

时间:2012-02-07 21:07:40

标签: java constructor null return-value new-operator

以下行是否可以返回null?

MyClass obj = new MyClass();

如果是,那么什么条件会导致返回值为null?

5 个答案:

答案 0 :(得分:16)

假设VM运行正常,new无法返回null。

来自section 15.9.4 of the Java Language Specification

  

类实例创建表达式的值是对指定类的新创建对象的引用。每次计算表达式时,都会创建一个新对象。

答案 1 :(得分:6)

不,这不能返回null。但是,它可能抛出异常,并且根据您处理该异常的方式,obj引用在处理异常后仍可能为null(如果您离开代码块,例如通过不捕获异常,{{ 1}}引用将不复存在,因此它不重要。

构造函数中异常的原因是多方面的,例如,如果内存不足(在这种情况下,您得到obj),或者如果您访问的是未初始化的字段,该字段仍为空并且会导致{{ 1}}。

答案 2 :(得分:3)

静态初始化程序错误

public class MyClass {

static {
  throw new Error("Error");
}

}

public class MyClass2 {

  static MyClass test=new MyClass();

}

如果不指定上下文,则无法提出问题。在应用程序服务器中,上面的内容将使用test = null来创建Myclass2。 为什么?因为错误通常由应用程序服务器捕获。

答案 3 :(得分:1)

简短回答 - 没有。

但是你可以从构造函数中抛出异常,在这种情况下,如果obj最初分配给null,它将保持null

答案 4 :(得分:0)

在我看来这是不可能的。如果你以某种方式在Java中耗尽内存,你将获得OutOfMemoryError异常。