5、异常处理

5、异常处理_第1张图片
image.png

java Exception:
1、Error
2、Runtime Exception 运行时异常
3、Exception
4、throw 用户自定义抛出的异常
异常分为两大类型:
● Error类:代表了编译和系统的错误,不允许捕获,比如虚拟机错误,内存空间不足,方法调用栈溢出等,如java.lang.StackOverFlowError和Java.lang.OutOfMemoryError等,对于这类错误,java编译器不去检查,仅靠程序本身也无法恢复和预防,建议终止程序

● Exception类:表示程序可以处理的异常,可以捕获且有可能恢复,对于这类异常,应尽可能处理异常,是程序恢复运行。此类又可分为运行时异常Runtime_Exception和非运行时异常Non_RuntimeException两个直接子类。

+ 运行时异常:对应于编译错误,是指java程序在运行时产生的由解释器引发的各种异常。比较常见的此类异常:除数为0时的算术异常ArithmeticException、错误的类型转换、数组下标越界ArrayIndexOutOfBoundsException、空指针异常NullPointerException
+非运行时异常:又称可检测异常,此类异常可使用throws和try-catch-finally来处理。比较常见:SQLException、IOException等

二、异常处理流程

1、 如果程序之中产生了异常,那么会自动的由JVM根据异常的类型,实例化一个指定异常类的对象;
2、 如果这个时候程序之中没有任何的异常处理操作,则这个异常类的实例化对象将交给JVM进行处理,而JVM的默认处理方式就是进行异常信息的输出,而后中断程序执行;
3、 如果程序之中存在了异常处理,则会由try语句捕获产生的异常类对象;
4、 与try之后的每一个catch进行匹配,如果匹配成功,则使用指定的catch进行处理,如果没有匹配成功,则向后面的catch继续匹配,如果没有任何的catch匹配成功,则这个时候将交给JVM执行默认处理;
5、 不管是否有异常都会执行finally程序,如果此时没有异常,执行完finally,则会继续执行程序之中的其他代码,如果此时有异常没有能够处理(没有一个catch可以满足),那么也会执行finally,但是执行完finally之后,将默认交给JVM进行异常的信息输出,并且程序中断;

三、一些需要注意的地方

●在catch块中,由上至下的异常范围越来越大
try语句在返回前,将其他所有的操作执行完,保留好要返回的值,而后转入执行finally中的语句,而后分为以下三种情况:
情况一:如果finally中有return语句,则会将try中的return语句”覆盖“掉,直接执行finally中的return语句,得到返回值,这样便无法得到try之前保留好的返回值。
情况二:如果finally中没有return语句,也没有改变要返回值,则执行完finally中的语句后,会接着执行try中的return语句,返回之前保留的值。
情况三:如果finally中没有return语句,但是改变了要返回的值,这里有点类似与引用传递和值传递的区别,分以下两种情况,:
1)如果return的数据是基本数据类型或文本字符串,则在finally中对该基本数据的改变不起作用,try中的return语句依然会返回进入finally块之前保留的值。
2)如果return的数据是引用数据类型,而在finally中对该引用数据类型的属性值的改变起作用,try中的return语句返回的就是在finally中改变后的该属性的值。

四、throw关键字

public class TestDemo { 
    public static void main(String args[]){ 
        try { 
            throw new Exception("抛着玩的,你管不着。") ; 
        } catch (Exception e) { 
            e.printStackTrace() ; 
        } 
    } 
} 

你可能感兴趣的:(5、异常处理)