java - 处理异常

标签 java exception

我对此代码有疑问,它与异常有关:

public class MTest {
    public static void main(String args[]) {
        try {
            m1();
            m2();
        } catch (Exception e1) {
            System.out.println("e");
        }
    }

    static void m1() throws Exception {
        try {
            throw new Exception();
        } catch (Exception e2) {
            System.out.println("m1catch");
        }
    }

    static void m2() throws Exception {
        try {
            throw new Exception();
        } finally {
            System.out.println("Finally");
        }       
    }
}

所以根据上面的代码,教科书告诉我,m2()方法不处理自己的异常,它被传递给main。这是什么意思?我如何从上面的代码中看出? m1() 是否处理自己的异常?

最佳答案

任何可以在方法内部引发的已检查异常都必须在 try/catch block 中处理,或者必须声明该方法以引发该异常。当您尝试编译违反这些规则的代码时,Java 编译器会发出警告。

m1() 捕获唯一已检查的异常,因此它处理自己的异常。如果您从 m1() 的声明中删除 throws Exception,它将正确编译,这意味着它确实处理了所有已检查的异常。

m2() 不处理其异常。如果从 m2() 的声明中删除 throws Exception,您将收到编译错误,因为抛出了异常但未捕获或检查。

关于java - 处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13040869/

相关文章:

php - 在每个 Controller 中处理相同的 try catch 结构

java - 类的较新版本的 ClassCastException

java - Hibernate 查询中的 Oracle 存储过程执行

Java:何时不使用 `private`

java - 在 Sonar 中,如何防止检查某些包中的某些规则?

Flutter Web Firestore 错误 : Expected a value of type '((Object?) => Object)?' , 但得到类型 '(Object) => Object?' 之一

java - java3D lib 配置的问题

Java:整数除法舍入

java - Junit 参数化测试失败,并出现 java.lang.IllegalArgumentException : argument type mismatch

php - 异常参数错误