public class First {
protected void method1() throws CustomException {
int number=10/0;
System.out.println("method 1" + number);
throw new CustomException("Divided by zero");
}
public class Second extends First {
protected void method2() {
method1();
}
public class Third extends Second {
protected void method3(){
try {
method2();
}
catch (CustomException ex)
{
System.out.println("Caught the exception");
System.out.println(ex.getMessage());
}
}
在这段代码中,首先抛出一个异常,我想从第三个捕获它(第二个不会处理错误)。但是second的方法调用不会让我通过。我怎样才能解决这个问题?
1条答案
按热度按时间cwxwcias1#
对于选中的异常(不是任何
RuntimeException
),它们必须由调用引发异常的另一个方法的方法处理或引发。oracle关于异常的教程中也对此进行了更深入的解释。此示例基于您的代码:
它会打印:
添加了缺少的
CustomException
:请注意,您的代码永远不会真正抛出异常,因为被0除将首先抛出。
ArithmeticException
是一个RuntimeException
因此不是一个检查过的异常,也不需要或保证任何声明。我已将其删除,因此将引发您的异常:你为什么
Second
的方法调用“不会让我通过”是因为Exception
在method1
你在电话里说的Second
的方法调用。所以你要么把电话转到method1()
在试抓块中,或throws
是的。既然你“想从第三名接球”,你就得throws
在方法声明中:这是不变的,除了添加了大括号: