首页 > 解决方案 > 异常 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 ma​​in 调用m();打印 2 并引发名为 MyExc3 的异常的方法。然后,这个异常应该由catch(MyExcp3 z)which 应该打印 3 等等来处理。但代码实际上并没有编译:

异常 MyExc3 永远不会在相应的 try 语句的主体中抛出

这是为什么?

标签: javaexception

解决方案


您缺少throws方法签名上的部分。

首先,您的代码(如现在给出的)无法编译,因为您main()可以 throw Exception,但没有声明它。当您修复它时,编译器会告诉您m()不会抛出 MyExc3 类的已检查异常。

因此:添加throws Exceptionpublic static void main(...)和相同的m()

static void m() throws MyExc3 {

这就是检查异常的要点:当您的方法使用throw someCheckedExceptionInstance... 时,必须在该方法中捕获该异常,或者该方法必须通过它宣布throws TheSpecificExceptionType它抛出该检查异常!


推荐阅读