Java:在构造函数中抛出exception,我的对象是否仍然可以创建?

你可以告诉我,当exception抛出构造函数并且对象不为null时,可能会出现这种情况。 我的意思是对象的某些部分被创建,而另一部分则没有。就像这样

public Test(){ name = "John"; // exception // init some other data. } 

我理解在这个sitiation对象Test中会为null,但可以是对象测试不能为null的情况(删除exception块不能回答:))?

如果对其限定符和参数的求值正常完成,并且存在足以创建对象的空间,则类实例创建表达式始终会创建新对象。 构造函数是否抛出exception并不重要; 仍然创建了一个对象。 但是,在这种情况下,类实例创建表达式不会正常完成,因为它传播了exception。

但是,您仍然可以获得对新对象的引用。 考虑以下:

 public class C { static C obj; // stores a "partially constructed" object C() { C.obj = this; throw new RuntimeException(); } public static void main(String[] args) { C obj; try { obj = new C(); } catch (RuntimeException e) { /* ignore */ } System.out.println(C.obj); } } 

这里,在抛出exception之前,对新对象的引用存储在别处。 如果运行此程序,您将看到该对象确实不为null,尽管其构造函数未正常完成。

不。查看客户端代码:

 Test myObj = null; try { myObj = new Test(); } catch(MyException e) { System.out.println("" + myObj); } 

这里,当发生exception时,不执行’=’操作。 你的代码直接进入catch块,myObj保持为null

否。如果在对象实例化期间发生exception,则不会创建它。

无论如何,你会写吗?

 MyObject obj = new MyObject(); // This code will not be reachable in case of an Exception 

要么:

 MyObject obj = null; try { obj = new MyObject(); } catch (AnyException e) { } // Here, either obj is created correctly, or is null as an Exception occurred. 
  public Test() { name = "John"; try{ // exception // init some other data. }catch(AnyException e) { //catch } } 

上述代码根据您的期望而有意义。