Java: Exception thrown in constructor, can my object still be created?

岁酱吖の 提交于 2019-11-29 04:13:17

A class instance creation expression always creates a new object if the evaluation of its qualifier and arguments complete normally, and if there is space enough to create the object. It doesn't matter if the constructor throws an exception; an object is still created. The class instance creation expression does not complete normally in this case, though, as it propagates the exception.

However, you can still obtain a reference to the new object. Consider the following:

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);
    }
}

Here, a reference to the new object is stored elsewhere before the exception is thrown. If you run this program, you will see that the object is indeed not null, though its constructor did not complete normally.

No. Look at the client code:

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

Here, when exception occurs, the '=' operation is not executed. Your code goes straight to the catch block and myObj stays null.

Romain Linsolas

No. If exception occurs during the instantiation of the object, it will not be created.

Anyway, you would you write it?

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

or:

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
}


 }

The above code make sense as per ur expectation.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!