异常


 
 
 

一:异常概述

 

1、异常的定义

 
异常指的是程序运行时出现的非正常情况。可能导致程序发生非正常情况的原因有很多,如数组下标越界、算术运算被0除、空指针访问、试图访问不存在的文件等。
 

2、异常的分类

 
编译期异常:最具代表的检查性异常是用户错误如题引起的异常,这是程序员无法预见的。例如要打开-一个不存在文件时,-一个异常就发生了,这些异常编译时不能被简单地忽略。

运行期异常:运行时异常是可 被程员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。

 

二: 异常的继承结构

 
 
在这里插入图片描述
 

 

三:异常的处理机制

 

  • Java 异常处理通过 5 个关键字 try,catch,finally,throw 和 throws 进行管理。

  • Java 中处理异常有两种方式:捕获异常,声明抛出异常

捕获异常:就地解决,并使程序继续执行。

声明抛出异常:就是将异常向外转移,即将异常抛出方法之外,由调用该方法的环境去处理。

 

 

1、捕获异常

 
try{
//一些会抛出的异常
}catch (Exception e) {
//第一个catch
//处理该异常的代码块
}catch (Exception e) {
//第二个catch,可以有多个catch处理该异常的代码块
}finally{
//最终要执行的代码
}
 

try: 捕获异常的第一步是用 try{…}选定捕获异常的范围,try 模块中的语句是程序正常流程要执行的语句,但是在执行过程中有可能出现异常。所有可能抛出异常的语句都放入 try 模块中。

catch(必有) :每个 try 代码块可以伴随一个或多个 catch 语句,用于处理 try 代码块中所生成的异常事件。catch 语句只 需要一个形式参数指明它所能够捕获的异常类型,这个类必须是 Throwable 的子类,运行时系统通过参数值把被抛弃的异常对象传递给 catch 块。在 catch 块中是对异常对象进行处理的代码,与访问其它对象一样,可以访问一个异常对象的数据成员或调用它的方法。

catch 语句的顺序: 捕获异常的顺序和 catch 语句的顺序有关,当捕获到一个异常时,剩下的 catch 语句就 不再进行匹配。因此, 在安排 catch 语句的顺序时,首先应该捕获最特殊的异常,然后再逐渐一般化。也就是一般先安排子类,再安排父类。

finally(可选) :捕获异常的最后一步是通过 finally 语句为异常处理提供一个统一的出口,使得在控制流转到程序的其它部分 以前,能够对程序的状态作统一的管理。不论在 try 代码块中是否发生了异常事件,finally 块中的语句都会被执行。
 
 

2、声名抛出异常

 

声明抛出异常:一个方法不处理它产生的异常,而是沿着调用层次向上传递,由调用它的方法来处理这些异常,叫声明抛出异常(throws)。声明抛出异常是一种消极的异常处理机制。
抛出异常就是产生异常对象的过程,首先要生成异常对象,异常或者由虚拟机生成,或者由某些类的实例 生成,也可以在程序中生成。在方法中,抛出异常对象是通过 throw 语句实现的,这一异常的产生和提交过程称为抛出(throw)异常。

例如:

IOException e = new IOException();
throw e;

注意:

  • 可以抛出的异常必须是 Throwable 或其子类的实例。
  • throws 子句中同时可以指明多个异常,之间由逗号隔开。
  • 对 Error 类或其子类的对象,程序中不必进行处理。
  • 对 RuntimeException 类或其子类,程序中可以不必进行处理。
     

除此之外的异常,程序员都应该在程序中进行处理。

处理方式分为以下几种:
要么用 try-catch-finally 进行捕获处理
要么明确表示不处理从而声明抛出异常
要么先捕获处理然后再次抛出

在进行异常处理过程中应该注意:
Java 的异常处理机制(try-catch-finally 语句、throws 子句、throw 语句)会带来 Java 程序代码结构上的改变。
① 不能滥用异常机制。简单的出错判断建议用 if 语句。
② 不要过分细分异常。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值