Java基础编程——异常处理之finally语句块

一、其中各个类的含义如下:

Throwable:异常的基类,所有异常都继承自 java.lang.Throwable 类,Throwable 类有两个直接子类:Error 类和 Exception 类

Error:是 Java 应用程序本身无法恢复的严重错误,应用程序不需要捕 获、处理这些严重错误。通常情况下,程序员无需处理此类异常。

Exception:由 Java 应用程序抛出和处理的非严重错误(即异常),也 是我们本章重点学习的对象。异常可分为运行时异常 (RuntimeException)和检查时异常(CheckedException)两种。

RuntimeException:运行时异常,即程序运行时抛出的异常,程序员在 编程时即使不做任何处理,程序也能通过编译。前面数组下标越界异常 和除数为 0 的异常都是运行时异常。

CheckedException:检查时异常,又称为非运行时异常,这样的异常要 求程序员必须在编程时进行处理,否则就会编译不通过。需要特别注意 的是,在 JDK 的异常定义体系中(即在所有 Throwable 的子类中), 并不存在真正的 CheckedException 类。也就是说,上图中的所有类 名,都能在 JDK 中找到对应的 API,但唯独 CheckedException 类并不 是真实存在的。一般而言,如果一个类继承自 RuntimeException,就称 此类为运行时异常;反之,如果一个类没有继承 RuntimeException,但 继承了 Exception 或 Throwable,就称此类为检查时异常

运行时异常:代码在编辑(编译阶段)时不报错,运行时才报错。

检查异常:代码在编辑(编辑阶段)时报错,在编辑时,必须处理

二、异常处理的两种方式

具体而言,Java 对异常的处理有以下两种方式:try catch 或者 throws

1. 捕获异常并处理:先在一段可能抛出异常的代码外,用 try{...}catch{...} 结构包裹起来。如果运行时发生了异常,那么此次 异常就会进入 catch{...} 代码块;如果一直没有异常发生,程序就不 会进入 catch{...} 代码块。并且 catch{...} 可以针对抛出的不同类 型的异常捕获后进行分类处理。

2. 抛出异常:通过 throws 关键字,将异常抛给上一级处理。

Try:将可能发生异常的代码用{}包裹起来

Catch:捕获特定类型的异常

try {
 ...
} catch (ArrayIndexOutOfBoundsException e) { //捕获数组下标越界异常
 ...
} catch (ArithmeticException e) { //捕获算数异常
 ...
} catch (Exception e) { //捕获其余所有类型的异常,类似于 swtich 结构中的
default
 ...
}catch (RuntimeException e) { //捕获运行时异常
System.out.println("发生运行时异常,成功捕获!");
}finally {
 System.out.println("显示完毕!");
 }

三、Finally

        finally 语句块保证无论是否发生异常,finally 语句块中的代码总被执行,在异常处 理结构中,finally 语句块不执行的唯一一种情况就是如果在 catch 语句中出现 System.exit(1),该方法表示关闭 JVM。直接退出 JVM

        从继承关系上来说,数组下标越界异常ArrayIndexOutOfBoundsException 是运行时异 常 RuntimeException 的子类,而运行时异常 RuntimeException 又是 Exception 异常的 子类,在捕获异常的时候,应该按照“从小到大”的顺序捕获异常(小范围到大范围),这样 才能保证逐层捕获。将上面的代码调整为先捕获数组下标越界异常 ArrayIndexOutOfBoundsException,再捕获运行时异常 RuntimeException,最后,为了防 止遗漏对某个异常的处理,一般建议在最后用 catch (Exception e) 捕获剩余的异常。

➢ 即使遇到 return,也仍然会执行 finally

➢ 除非虚拟机关闭,才不会执行 finally 

四、throw 和 throws 的区别

  • throw关键字手动抛出一个异常;throw位于方法体内部,可作为单独语句使用;throw抛出一个异常对象,只能是一个。

  • throws 用于将异常提交给该方法的调用出进行处理;throws位于方法参数列表的后面,不能单独使用;throws后面跟异常类,可以跟多个。

五、常见的异常

  • 1、NullPointerException
    
    空指针异常属于运行时异常
    
    就是调用了未经初始化的对象或者不存在的对象

  • 2、ClassNotFoundException
    
    该异常为类没能找到的异常
    • 出现这种情况一般有三种原因

      • 一是的确不存在该类;

      • 二是开发环境进行了调整

      • 三是在修改类名时,没有修改调用该类的其他类,导致类找不到的情况

  • 3、IllegalArgumentException
    
    抛出该异常表明向方法传递了一个不合法或不正确的参数
  • 4、InputMismatchException
    
    由 Scanner 抛出,表明 Scanner 获取的内容与期望类 型的模式不匹配,或者该内容超出期望类型的范围
  • 5、ClassCastException
    
    当试图将对象强制转换为不是实例的子类时,抛出该异常
  • 6、SQLException
    
    提供关于数据库访问错误或其他错误信息的异常
  • 7、IOException
    
    当发生某种 I/O 异常时,抛出此异常。此类是失败或中断的 I/O 操作生成的异常的通用类

支持:如果你觉得博主的文章的不错或者对你有帮助,可以点一个免费的关注支持一下博主,你的鼓励将是我创作的最大动力!!! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-今非昔比°

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值