jit*_*itm 10 java logic constructor exception
当异常抛出构造函数并且对象不为null时,你能否告诉我一些情况?我的意思是对象的某些部分是创建的,而另一部分则不是.就像这样
public Test(){
name = "John";
// exception
// init some other data.
}
Run Code Online (Sandbox Code Playgroud)
我理解在这个sitiation对象Test中会为null,但可以是对象测试不能为null的情况(删除异常块不能回答:))?
Nat*_*yan 25
如果对其限定符和参数的求值正常完成,并且存在足以创建对象的空间,则类实例创建表达式始终会创建新对象.构造函数是否抛出异常并不重要; 仍然创建了一个对象.但是,在这种情况下,类实例创建表达式不会正常完成,因为它传播了异常.
但是,您仍然可以获取对新对象的引用.考虑以下:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
这里,在抛出异常之前,对新对象的引用存储在别处.如果运行此程序,您将看到该对象确实不为null,尽管其构造函数未正常完成.