Java中的异常处理

本文的核心内容:Java中的异常体系,如何处理异常,自定义异常。


一:异常的分类

    在面向对象的概念中,一个错误也是一个对象,犯了一个错误,也就是创建了一个错误对象。在 Java 中,有一个 java.lang.Throwable类,这个类是所有错误的父类。Throwable 类有两个子类:Error类和Exception类。

    Throwable 类:所有错误的父类

        |-- Error: 严重的底层错误,无法处理

        |-- Exception : 异常,异常处理的主要对象

            |-- RuntimeException 的子类:未检查异常,可以避免,可处理可不处理

            |-- 非 RuntimeException 的子类: 已检查异常,无法避免,必须处理

 

二:常见的运行时异常

     数组下标越界: java.lang. ArrayIndexOutOfBoundsException

     类型转换异常: java.lang.ClassCastException

     空指针异常: java.lang.NullPointerException

     数据类型转换异常:java.lang.NumberFormatException

 

三:异常的产生和传递

 

    异常的产生:

            自动抛出异常 : 当程序在运行时遇到不符合规范的代码或结果时,会产生异常。

            手动抛出异常 :语法 : throw new  异常类型 (“ 实际参数 ”);

            产生异常 结果 :相当 于遇到 return 语句,导致程序因异常而终止。

 

        异常的传递:

        按照方法的调用链反向传递 ,如始终没有处理异常,最终会由 JVM进行默认异常处理(打印堆栈跟踪信息)。

 

四:异常的处理

 

    try-catch 的语法结构如下:

try{

    可能发生异常的代码;

}catch(捕获的异常类型 1 e){

    异常处理 1…

}catch(捕获的异常类型 2 e){

    异常处理 2…

} catch(捕获的异常类型 n e){

    异常处理 n…

}

 

    如果在 try 语句块中没有出现异常,那么任何一个 catch 语句块都不会得到执行。但一旦 try 块中出现了异常,程序的流程会马上跳出 try 块,根据异常类型的不同,进入某一个catch 语句块。随后,这个异常被宣告处理完毕,程序将继续向下正常运行。

 

 

    finally

        finally 语句是 try-catch 语句的一个补充。在 try-catch 语句块之后,可以加上一个 finally语句块,这个语句块中的代码,无论程序执行时是否发生异常,最终都会被执行。

正因为 finally 语句块中的代码一定会被执行,因此 finally 语句块中我们往往会放上一些释放资源的代码。例如,有下面一些步骤:

        1. 申请数据库连接资源

        2. 通过数据库的验证,得到数据库连接

        3. 使用数据连接,完成数据库的操作

        4. 释放数据库连接

    在上面的四个步骤中,释放数据库连接就是一个非常典型的释放资源的过程。但是无论发生异常与否,数据库连接的释放都应该执行,因此这一步也就是所谓的一定要执行的一步。为了保证数据库连接的释放一定被执行,因此这一步应当放在 finally语句块中。

 

常用的结构:

try{ } catch{ }

try { } catch{ } catch{ }

try { } catch{ } finally{ }

try { } catch{ } catch{ } finally{ }

try { } finally{ }

 

注: 多重 catch , 遵循从子 (  小 ) ) 到父 (  大 ) ) 的顺序,父类异常在最后。

 

 

五:自定义异常

    需继承自 Exception 或 Exception 的子类,常用 RuntimeException 。

 

    一般,我们需要在自定义异常类中自定义构造函数: 

  

class AgeMisMatch extends Exception{

    public AgeMisMatch() {

    super();

}

public AgeMisMatch(String message) {

    super(message);

    }
}

 

 

 

六:方法覆盖

        带有异常声明的方法覆盖:

            •  方法名、参数列表、返回值类型必须和父类相同。

            •  子类的访问修饰符合父类相同或是比父类更宽。

            •  子类中的方法,不能抛出比父类更宽的异常。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值