异常的捕获和处理

9.1.1 异常概述

1.认识异常

异常: 在程序的运行过程中所发生的不正常事件; 

  • 文件找不到
  • 网络连接中断或者不同
  • 算术运算出错
  • 数组下标越界
  • 装载一个不存在多的类
  • null对象操作
  • 类型转换异常

通过  if - else 语句进行异常处理, 缺点如下:

  • 代码臃肿, 加入大量异常情况判断和处理代码
  • 影响开发效率
  • 难以穷举所有的异常情况, 程序不健壮
  • 影响代码的可读性, 加大日后程序的维护难度

2. Java异常体系结构

异常在java中被封装成了各种异常类;

所有异常类型都是 Throwable 类的子类, 它派生了两个类 :  Error类 和 Exception类;

  • Error: 表示仅靠程序本身无法恢复的严重错误;
  • Exception: 由java应用程序抛出和处理的非严重错误;
异常说明
Exception异常层次结构的根类
ArithmeticException算数错误异常, 如以零作为除数
ArrayIndexOutOfBoundException数组下标越界
NullPointerException尝试访问null对象成员
ClassNotFoundException不能加载所需的类
InputMismatchException想要的数据类型与时间输入的类型不匹配
IllegalArgumentException方法接收到非法参数
ClassCastException对象强制类型转换出错
NumberFormatexception数字格式转换异常, 如把“abc”转换成数字

 

9.1.2 Java异常处理机制

1.异常处理

五个关键字来处理: try , catch , finally , throw , throws;

2.使用try - catch处理异常

三种情况:

  1. 如果try语句块中所有语句正常执行完毕, 没有发生异常, 那么catch语句块中所有语句都将会被忽略。  
  2. 如果try语句块在执行过程中发生异常, 并且这个异常与catch语句块中声明的异常类型匹配, 那么try语句块剩下的代码都将被忽略,而相应的catch语句块将会被执行。 匹配是指catch处理的异常类型 与 所生成的异常类型完全一致或是它的父类;
  3. 如果try语句块在执行过程中发生异常, 而抛出的异常在catch语句块中没有被声明,那么方法立刻退出;

3.使用try - catch - finally 处理异常

两种情况

  1. 如果try语句块中所有语句正常执行完毕,finally语句块也会被执行;
  2. 如果try语句块在执行过程中发生异常, 无论这种异常能否被catch语句块捕获到, 都将执行finally语句块中的代码;

4.使用多重catch处理异常

一段代码可能会引发多种类型的异常, 可以在try语句块后面跟多个catch语句块分别处理不同的异常; 但排列顺序必须是从子类到父类, 最后一个一般都是Exception类;因为按照匹配原则, 如果把父类异常放到前面, 后面的catch语句块将不会获得执行机会;

5.使用throws声明抛出异常

关键字throws声明某个方法可能抛出的各种异常以通知调用者; throws可以同时声明多个异常, 之间用逗号隔开;

6.使用throw抛出异常

系统无法自动发现并解决, 需要程序员而不是系统来自行抛出异常, 把问题提交给调用者去解决;

 

throw 和 throws 的区别

(1)作用不同: throw 用于程序员自行产生并抛出异常, throws用于声明该方法内抛出了异常

(2)使用的位置: throw位于方法体内部, 可以作为单独语句使用, throws必须跟在方法参数列表的后面, 不能单独使用;

(3)内容不同:throws抛出一个异常对象, 只能是一个; throws后面跟异常类, 可以跟多个;

7.自定义异常

  1. 定义异常类, 并继承Exception 或者 RuntimeException 
  2. 编写异常类的构造方法, 并继承父类的实现, 常见的构造方法:
//构造方法1
public MyException(){
    super();
}

//构造方法2
public MyException(String message){
    super(message);
}

//构造方法3
public MyException(String message , Throwable cause){
    super(message , cause);
}

//构造方法4
public MyException(Throwable cause)
    super(cause);
}

(3) 实例化自定义异常对象, 并在程序中使用throw抛出;

8. 异常链

创建新的异常, 保留了原有的异常的信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值