当我们使用throws时,谁以及如何处理异常?

tan*_*was 1 java exception-handling

class Test{

public static void main(String[] cv) throws IOException{

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

String s=br.readLine();
 }

}
Run Code Online (Sandbox Code Playgroud)

当我们写抛出时,谁在这里实际处理IOException?当我们使用try-catch时,我们可以在catch块中处理它.但在这里如何以及谁在处理?

Jes*_*per 6

如果你有一个带有throws子句的方法,那么调用该方法的任何其他方法都必须处理异常(通过捕获它)或者通过throws为该类型的异常设置一个子句来进一步抛出它(这样,反过来,再次调用那个的方法也必须这样做,等等.

main方法有throws子句时,JVM将负责捕获异常,默认情况下它只会打印异常的堆栈跟踪.

如果要在main抛出异常时进行特殊处理,则可以设置未捕获的异常处理程序:

Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {
    @Override
    public void uncaughtException(Thread t, Throwable e) {
        System.err.printf("Thread %s threw an uncaught exception!%n", t.getName());
        e.printStackTrace();
    }
});
Run Code Online (Sandbox Code Playgroud)