【问题标题】:What conditions cause object instantiation to return null? [duplicate]什么条件导致对象实例化返回 null? [复制]
【发布时间】:2012-02-07 21:07:40
【问题描述】:

下面一行是否可以返回null?

MyClass obj = new MyClass();

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

【问题讨论】:

  • 我很好奇是什么引发了这个问题。
  • @KevinD 这听起来像是一道 Java 认证考试题。

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


【解决方案1】:

假设 VM 正常运行,new 不可能返回 null。

来自section 15.9.4 of the Java Language Specification

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

【讨论】:

    【解决方案2】:

    不,这不能返回 null。但是,它可能会引发异常,并且根据您处理该异常的方式,obj 引用在处理异常后可能仍为 null(如果您离开代码块,例如,通过不捕获异常,obj 参考将不复存在,因此无关紧要)。

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

    【讨论】:

      【解决方案3】:

      静态初始化错误

      喜欢

      public class MyClass {
      
      static {
        throw new Error("Error");
      }
      
      }
      
      public class MyClass2 {
      
        static MyClass test=new MyClass();
      
      }
      

      您不能在不指定上下文的情况下提出问题。在应用程序服务器中,上面将创建 Myclass2 且 test=null。 为什么 ?因为错误通常被应用服务器捕获。

      【讨论】:

      • 你能用代码扩展答案吗?
      【解决方案4】:

      简短回答 - 否。

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2016-11-05
          • 2012-08-13
          • 1970-01-01
          • 1970-01-01
          • 2012-10-16
          • 2019-11-17
          • 2017-09-27
          • 2011-03-24
          相关资源
          最近更新 更多