java - 异常 MyExc3 永远不会在相应的 try 语句的主体中抛出
问题描述
我已经看到了一个类似的问题,但我还没有找到解决方案,因为在我的例子中,放在 try 子句中的函数实际上会引发异常。
class MyExc1 extends Exception { }
class MyExc2 extends MyExc1 { }
class MyExc3 extends MyExc2 { }
public class A1 {
public static void main(String [] argv) {
try {
m();
} catch( MyExc3 k ) {
System.out.print(1);
} catch( Exception u ) {
} finally {
throw( new Exception() );
}
}
static void m() {
try {
System.out.print(2);
throw( new MyExc3() );
}catch( MyExc3 z ) {
System.out.print(3);
}catch( Exception d ) {
System.out.print(4);
}finally {
System.out.print(5);
}
}
}
在我的 try 块中,psv main 调用m();
打印 2 并引发名为 MyExc3 的异常的方法。然后,这个异常应该由catch(MyExcp3 z)
which 应该打印 3 等等来处理。但代码实际上并没有编译:
异常 MyExc3 永远不会在相应的 try 语句的主体中抛出
这是为什么?
解决方案
您缺少throws
方法签名上的部分。
首先,您的代码(如现在给出的)无法编译,因为您main()
可以 throw Exception
,但没有声明它。当您修复它时,编译器会告诉您m()
不会抛出 MyExc3 类的已检查异常。
因此:添加throws Exception
到public static void main(...)
和相同的m()
:
static void m() throws MyExc3 {
这就是检查异常的要点:当您的方法使用throw someCheckedExceptionInstance
... 时,必须在该方法中捕获该异常,或者该方法必须通过它宣布throws TheSpecificExceptionType
它抛出该检查异常!
推荐阅读
- c++ - 如何在 CSR 矩阵的对角块中计算每行的非零值
- scala - 为什么添加 println 会使我的代码无法编译
- executable - 如何在 Python 3.7 中制作单个跨平台 EXE 文件
- php - 如何完成这个 PHP curl 请求以使用 Python 从 API 获取响应?
- python - PySpark sql每天比较记录并报告差异
- swift - Xcode 9 跳转到定义不再起作用
- excel - 当包含该值的范围的工作表处于非活动状态时,文本框值不显示
- c# - 用自定义数量的面掷骰子
- android - 为什么在给定 List 时为参数化 JUnit 测试抛出 IllegalArgumentException
- >,但适用于列表
> - thymeleaf - Thymeleaf:单个元素内的 2 个循环和一个 if 语句