首先还是借用一张图来说明一下:

java虚拟机 排查 java虚拟机能自动处理( )异常_java虚拟机 排查


 Java中运行时产生的逻辑错误分为两类:可捕获的异常和不可捕获的错误。

Error(错误):是程序无法处理的,表示运行应用程序中较严重问题。这些错误表示故障发生于虚拟机自身、或者发生在虚拟机试图执行应用时,如Java虚拟机运行错误(Virtual MachineError)、类定义错误(NoClassDefFoundError)等。

Exception(异常):是程序本身可以处理的异常。

运行时异常:都是RuntimeException类及其子类异常,如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。

非运行时异常 (编译异常):从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。

   在 Java 应用程序中,异常处理机制为:抛出异常,捕捉异常。

        抛出异常:当一个方法出现错误引发异常时,方法创建异常对象并交付运行时系统,异常对象中包含了异常类型和异常出现时的程序状态等异常信息。运行时系统负责寻找处置异常的代码并执行。

        捕获异常:对于所有的可查异常,Java规定:一个方法必须捕捉,或者声明抛出方法之外。也就是说,当一个方法选择不捕捉可查异常时,它必须声明将抛出异常。

try-catch语句

     在Java中,异常通过try-catch语句捕获。其一般语法形式为

try {  

    // 可能会发生异常的程序代码  

} catch (Type1 id1){  

    // 捕获并处置try抛出的异常类型Type1  

}  

catch (Type2 id2){  

     //捕获并处置try抛出的异常类型Type2 

 

}  

       关键词try后的一对大括号将一块可能发生异常的代码包起来,称为监控区域。Java方法在运行过程中出现异常,则创建异常对象。将异常抛出监控区域之 外,由Java运行时系统试图寻找匹配的catch子句以捕获异常。若有匹配的catch子句,则运行其异常处理代码,try-catch语句结束。

       匹配的原则是:如果抛出的异常对象属于catch子句的异常类,或者属于该异常类的子类,则认为生成的异常对象与catch块捕获的异常类型相匹配。