在java构造函数中抛异常,java对象会被创建吗?
比如我要检查构造函数参数不能小于0,如果小于0就抛异常;那么这个对象还会被创建吗?
废话少说直接上代码
class MyClass { public MyClass(int v) { try { if(v<0) throw new Exception("v<0!"); } catch (Exception e) { System.out.println(e.getMessage()); } } public void SomeMethod() { System.out.println("SomeMethod"); } } class Program { public static void main(String[] args) { MyClass mc = new MyClass(-1); mc.SomeMethod(); } }
执行结果
v<0!
SomeMethod
所以这个对象是被创建了的
应该不吧。。。 程序进去后判断不合要求,抛出异常了。。。我觉得就相当于略过这个方法了。
你试一下不就知道了,对一般方法如果抛出异常,就在抛出的地方跳出方法。
楼上说的没错,亲测:
1 package overloadtest; 2 3 class MyClass { 4 public MyClass(int v) { 5 try { 6 if (v < 0) 7 throw new Exception("v<0!"); 8 } catch (Exception e) { 9 System.out.println(e.getMessage()); 10 } 11 } 12 13 void SomeMethod() { 14 System.out.println("SomeMethod"); 15 } 16 } 17 18 public class Program { 19 public static void main(String[] args) { 20 MyClass mc = new MyClass(-1); 21 mc.SomeMethod(); 22 } 23 }
Console:
v<0!
SomeMethod
你都catch了当然会创建啊。你这届抛异常不处理肯定是要跳出构造方法的吧
异常你都处理了,当然会创建这个对象啊
直接抛的话是编译不会通过的。
如果你catch了就会通过。自己把异常处理了当然会。通过了当然会创建对象。