以下行是否可以返回null?
MyClass obj = new MyClass();
如果是,那么什么条件会导致返回值为null?
答案 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
异常。