当抛出新的Error()写在try块中为什么catch块没有被执行.最后只进入.Latter代码也没有被执行

Rah*_*thi 1 java exception-handling

示例下面的程序,其中在try块中调用了defectedCode()方法,那么为什么只输出只显示C带有"线程中的异常"主"java.lang.Error".

public class ExceptionTest {

    public static void defectedCode(){

        throw new Error();
    }

    public static void main(String args[]){

        try{
            defectedCode();
            System.out.println("A");

        }catch(Exception e){

            System.out.println("B");

        }finally{

            System.out.println("C");
        }
        System.out.print("D");
    }
}
Run Code Online (Sandbox Code Playgroud)
Exception in thread "main" java.lang.Error

C

at ExceptionTest.defectedCode(ExceptionTest.java:15)

at ExceptionTest.main(ExceptionTest.java:21)

Java Result: 1
Run Code Online (Sandbox Code Playgroud)

Ste*_*ett 7

这样做的主要原因是你抛出一个错误,但你发现了异常.如果你看一下Throwable层次结构,那么这一点很清楚.您无法捕获异常错误.因此,不会输入catch块,最后将被调用.

试试这个:

    try{
        defectedCode();
        System.out.println("A");

    }catch(Throwable e){

        System.out.println("B");

    }finally{

        System.out.println("C");
    }
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述