Java的异常处理

一、异常的概念

异常是指在程序运行中打断正常程序流程的任何不正常的情况,在Java程序中,由于程序员的疏忽和环境因素的变化,会经常出现异常情况。如果不对异常进行处理,就会导致程序的不正常终止。为了保证程序的正常运行,Java专门提供了异常处理机制。

Java中只有Throwable类及其子类的对象才能由异常处理机制进行处理
Java处理的异常可以大致分为3类:Error及其子类、RuntimeException及其它Exception类。Java对于不同的异常类采取不同的处理策略:

  1. Error及其子类:Error意味着是很难恢复的严重错误,一般不由程序处理
  2. RuntimeException:意味着程序设计或实现问题,如:数组使用越界、算术运算异常(如除0运算)、空指针异常(即访问没有初始化的空指针),对于这类异常,处理的策略是纠正错误
  3. 其它Exception类:通常是由环境因素引起的,如:访问的文件不存在、无效URL等,这类异常经常是由用户的误操作引起的,可以在异常处理中处理,例如提示用户进行正确操作

二、异常处理方法

异常处理是指程序获得异常并处理,然后继续程序的执行。为了使程序安全,Java要求如果程序中调用的方法有可能产生某种类型的异常,那么调用该方法的程序必须采取相应动作处理异常。
异常处理具体有如下两种方式:

  1. 捕获并处理异常
  2. 将方法中产生的异常抛出

1.捕获并处理异常

(1)try catch finally语句

try catch finally语句可以捕获程序中产生的异常,然后针对不同的异常采用不同的处理程序进行处理。try catch finally语句的基本格式如下:

try{
    Java statements  //一条或多条可能抛出异常的Java语句
}catch (MyExceptionType e) {
    Java statements  //当MyExceptionType类型的异常抛出后要执行的代码
}catch (Exception e) {
    Java statements  //对所有Exception类型的异常(即所有可处理的异常)执行的代码
}finally {
    Java statements  //执行最终的清理语句
}

try catch finally语句把可能产生异常的语句放入 try{} 语句块中,然后在该语句后紧跟一个或多个 catch 块,每个 catch 块处理一种可能抛出的特定类型的异常。在运行时刻,如果 try{} 语句块中产生的异常与某个 catch 语句处理的异常类型相匹配,则执行该 catch 语句块。finally 语句定义了一个程序块,可放于 try{}catch{} 块之后,该程序有无异常都会执行,一般用于关闭文件或释放其它系统资源。
try catch finally语句中,catch语句可以有一个或多个,finally语句可以省略。但是try语句后至少要有一个catch语句或finally语句。

(2)针对多种异常的通用异常处理

用catch语句进行异常处理时,可以使一个catch块捕获一种特定类型的异常,也可以定义处理多种类型异常的通用catch块。Java中异常类的层次结构示意图如下所示:
Java程序中产生的异常都是Throwable类的对象,具体来说是Throwable或它的子类的实例对象。

在这里插入图片描述

如果catch语句块要捕获的异常类是一个中间节点(带有子类的节点),则该异常处理块将可以处理该节点以及其所有子类表示的异常。这样的一个catch语句块就是一个能够处理多种异常的通用异常处理块。
举个小例子:在下面的代码中,catch语句块将处理Exception类及其所有子类类型的异常,即处理程序能够处理的所有类型的异常。

try {
    Java statements
} catch (Exception e) {
    System.err.println("Exception caught: " + e.getMessage());
}

2.将方法中产生的异常抛出

第二种异常处理的方法是:将方法中可能产生的异常抛出。调用该方法的程序将接收到所抛出的异常。例如下面的这个例子:

public void troublesome() throws IOException{
    Java statements
}

如果被抛出的异常在调用程序中未被处理,则该异常将被沿着方法的调用关系继续上抛。直到被处理为止。
如果一个异常返回到了main()方法,并且在main()方法中还没有被处理,那么这个异常将把程序非正常地终止。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JJP1124

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

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

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

打赏作者

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

抵扣说明:

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

余额充值