我正在阅读从构造函数中抛出异常的主题.在stackflow上研究了一些相同的主题之后.我得出的结论是,我们可以从构造函数中抛出异常.当我们尝试子类化其构造函数抛出异常的父类时,就会出现问题.例如,请参阅下面的以下代码段.
class ParentConstructorException{
public ParentConstructorException() throws IOException {
}
}
public class TestConstructorException extends ParentConstructorException {
public TestConstructorException() throws Exception{
}
//Causes compile time error if i don't throw exception
public TestConstructorException(int x){
}
}
Run Code Online (Sandbox Code Playgroud)
我在子类中提供了一个no-arg构造函数,它抛出了一个更广泛的异常.当我重载构造函数时,它说我没有处理检查的异常.那么这意味着我们不能在不抛出相同或更广泛的已检查异常的情况下启动子类?请有人解释一下.本
那么每个子类都将链接到一个超类构造函数.在你的情况下,这是隐含发生的 - 例如:
public TestConstructorException(int x) {
}
Run Code Online (Sandbox Code Playgroud)
相当于
public TestConstructorException(int x) {
super();
}
Run Code Online (Sandbox Code Playgroud)
您无法捕获子类构造函数中的超类构造函数抛出的任何异常,因为超类构造函数的链接必须是构造函数体中的第一件事 - 您甚至无法启动try块.
那么,如果超类构造函数抛出异常,您希望子类构造函数做什么?
| 归档时间: |
|
| 查看次数: |
1616 次 |
| 最近记录: |