Runtim Exception扩展Exception和自定义异常从Exception扩展为什么后一个是编译时异常而另一个不是?

tam*_*nad 4 java exception-handling exception runtimeexception

在Java中我有一个Exception类,它扩展自Exception,但每当我抛出它时,编译器说它需要被捕获/必须声明方法throwsException.

当我使用RuntimeException扩展的Exception,编译器不会停止,它将它们作为运行时异常,我们不需要处理它.

有没有办法让我可以从Exception扩展MyException并将其作为运行时异常.或是什么使这成为课堂上的可能性RuntimeException

private void compileTime() throws MyException{
        throw new MyException();
    }

    private void runTime() {
        throw new MyRuntimeException();
    }

    class MyException extends Exception {

    }
    class MyRuntimeException extends RuntimeException {

    }
Run Code Online (Sandbox Code Playgroud)

Rah*_*hul 9

RuntimeException是可以进行恢复的异常的未经检查的异常的子集.

在编译时不检查未经检查的异常,这意味着编译器不需要捕获或指定(带有抛出)它们的方法.

未经检查的异常类是RuntimeException的类及其子类,类错误和它的子类.所有其他异常类都是已检查的异常类.

请通过此图片检查异常层次结构: 异常层次结构

简而言之,任何派生自"Exception"的异常都是一个经过检查的异常,而从RuntimeException派生的类是未经检查的.调用代码不需要显式处理RuntimeExceptions.


And*_*niy 3

决不。根据规范,只有从RuntimeException类或Error类扩展的异常才被视为未经检查的异常(JLS 7,p.11.1.1)。