为什么我不能在try catch语句中调用的方法中抛出Exception(checked)?

Gur*_*nda 2 java exception-handling

 public class simple {
    public static void main(String[] args) {
        try {
            System.out.print("hello ");
            throwit();
        } catch (Exception re) {
            System.out.print("caught ");
        }
    }

    public static void throwit(){  // line number 11
        throw new Exception();  // line number 12
    }
   }
Run Code Online (Sandbox Code Playgroud)

为什么它会给我一个第12行的编译错误.如果我对行号11使用throws Exception,那么它工作正常.如果我抛出Exception的子类(在第12行),那么它可以正常工作......为什么呢?...

我想知道背面发生了什么(编译器如何显示错误)?

Eri*_*ica 10

你有一个方法抛出一个已检查的异常,但它的方法签名并没有指定它能够做到这一点.必须在方法签名中声明所有已检查的异常,并通过try/catch块或重新抛出显式处理; 这就是被检查异常的定义.:)

这一行:

public static void throwit()
Run Code Online (Sandbox Code Playgroud)

应该

public static void throwit() throws Exception
Run Code Online (Sandbox Code Playgroud)

  • 我们还应该注意,抛出`Exception`并将一个方法声明为抛出`Exception`几乎肯定是一个坏主意.它使调用者很难做任何有意义的事情......除了记录异常和纾困.您应该始终抛出/声明更具体的异常,以便调用者可以区分预期的异常和异常的异常. (6认同)