2014-09-06 43 views
0

以下语句来自java中的思维,“派生类构造函数无法捕获由其基类构造函数抛出的异常。”但我能够抓住它。任何人都可以解释我出错的地方吗?“派生类构造函数无法捕获由其基类构造函数抛出的异常。”但能够抓住它

class Base { 
    Base() throws CloneNotSupportedException { 
     throw new CloneNotSupportedException(); 
    } 
} 

class Derived extends Base { 

    Derived() throws CloneNotSupportedException, RuntimeException {} 

    public static void main(String[] args) { 
     try { 
      Derived d = new Derived(); 
     } 
     catch(CloneNotSupportedException e) { 
      e.printStackTrace(); 
     } 
     catch(RuntimeException re){} 
    } 
} 

输出:

java.lang.CloneNotSupportedException 
    at Base.<init>(Coffee.java:4) 
    at Derived.<init>(Coffee.java:9) 
    at Derived.main(Coffee.java:14) 

回答

2

您没有赶上在派生类的构造函数什么。你在主要方法中捕获异常。因此,您不会与您发布的报价相抵触。

1

这是你的派生类的构造函数怎么也为了赶上从基类的构造函数的异常看:

Derived() { 
    try { 
    super(); 
    } catch (CloneNotSupportedException e) { 
    System.out.println("We have indeed caught an exception from the "+ 
      "base-class constructor! The book was wrong!"); 
    } 
} 

试一试,看看什么出来。

+0

这本书是正确的。当我修改我的派生类时,你给了。它给我complie时间错误,“调用超级必须是构造函数中的第一个语句”,所以我想我们不能捕获该异常 – user2899676 2014-09-06 11:42:09

+1

正是我的答案的要点。最好的学习方法是找出你自己。 – 2014-09-06 11:45:14

相关问题