2012-02-07 66 views
4

下列行可能返回null吗?什么情况导致对象实例化返回null?

MyClass obj = new MyClass(); 

如果是这样,什么样的条件会导致返回值null?

+0

我对这个问题的提示感到困惑。 – 2012-02-07 21:17:26

+0

@KevinD这听起来像是一个Java认证考试问题。 – 2012-02-07 22:14:00

回答

16

假设虚拟机运行正常,new不可能返回null。

section 15.9.4 of the Java Language Specification

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

0

在我看来这是不可能的。如果你以某种方式在Java中使用内存不足,你将会得到异常(OutOfMemoryError)。

3

静态初始化错误

public class MyClass { 

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

} 

public class MyClass2 { 

    static MyClass test=new MyClass(); 

} 

你不能没有指定上下文问你的问题。在应用程序服务器中,上面的代码将使用test = null来创建Myclass2。 为什么?因为错误通常被应用程序服务器困住。

+0

你可以用代码扩展答案吗? – 2012-02-07 21:10:51

1

简答题 - NO。

但是你可以从构造函数抛出一个异常,在这种情况下,如果obj最初被分配到null,它仍将null

6

不,这不能返回null。但是,它可能会引发异常,并且取决于您如何处理该异常,在处理异常后obj引用可能仍然为空(如果您离开代码块,例如通过不捕获该异常,则obj引用将不再存在因此它没关系)。

原因在构造函数中的异常是多方面的,例如,如果您运行的内存(在这种情况下,你会得到一个OutOfMemoryError),或者如果你访问一个未初始化的字段,它仍然是空,将导致NullPointerException

相关问题