Java基础篇笔记(五):Java中的异常处理机制

一、引入异常

异常机制已经成为判断一门编程语言是否成熟的标准,异常机制可以使程序中的异常处理代码和正常业务代码分离,保证程序代码更加优雅,并可以提高程序的健壮性。
Java的异常机制主要依赖于try、catch、finally、throw、throws五个关键字,其中try关键字后紧跟一个花括号括起来的代码块(花括号不可以省略),简称try块,它里面放置可能引发异常的代码。catch后对应异常类型和一个代码块,用于表明该catch块用于处理这种类型的代码块。多个catch块后还可以跟一个finally块,finally块用于回收在try块里打开的物理资源。 throws关键字主要在方法签名中使用,用于声明该方法可能抛出的异常;而throw用于抛出一个实际的异常,throw可以单独作为语句使用,抛出一个具体的异常对象。

二、异常处理机制

下面是Java异常处理机制的语法结构:

try{
    //业务实现代码
    ...
}
catch(Exception e){
    alert 输入不合法
    goto retry
}

如果执行try块的业务逻辑代码时出现异常,系统将自动生成一个异常对象,该异常悐被提交给Java运行时环境,这个过程被称为抛出(throw)异常。当Java运行时环境收到异常对象时,会寻找能处理该异常对象的catch块,如果找到合适的catch块,则把该异常对象交给该catch块处理,这个过程被称为捕获(catch)异常;如果Java运行时环境找不到捕获异常的catch块,则运行时环境终止,Java程序也将退出。

不管程序代码块是否处于try块中,甚至包括catch块中的代码,只要执行该代码块时出现了异常,系统总会自动生成一个异常对象。如果程序没有为这段代码定义任何的catch块,则Java运行时环境无法找到处理该异常的catch块,程序就在此退出。

当Java运行时环境接收到异常对象时,会依次判断该异常对象是否是catch块后异常类或其子类的实例,如果是,Java运行时环境将调用该catch块来处理该异常;否则再次拿该异常对象和下一个catch块里的异常类进行比较。当程序进入负责处理的catch块时,系统生成的异常对象ex将会传给catch块后的异常形参,从而允许catch块通过该对象来获得异常的详细信息(当进入catch块后就不会再向下执行了)。try块后可以有多个catch块,这是为了针对不同的异常类提供不同的异常处理方式。当系统发生不同的以外情况时,系统会生成不同的异常对象,Java运行时就会根据该异常对象所属的异常类来决定使用哪个catch块来处理该异常。

在通常情况下,如果try块被执行一次,则try块后只有一个catch块会被执行,不可能有多个catch块被执行。除非在循环中使用了continue开始下一次循环,下一次循环重写运行了try块,这才导致多个catch块被执行。try块里声明的变量时代码块内局部变量,它只在try块内有效,在catch块中不能访问该变量。

三、异常与错误

Java把所有的非正常的情况分成两种:异常(Exception)和错误(Error),它们都继承Throwable父类。Error错误一般指虚拟机相关的问题,如系统奔溃、虚拟机错误、动态链接失败等,这些错误无法恢复或不可能捕获,将导致程序中断。通常应用程序无法处理这些错误,因此程序不应该试图用catch块来捕获Error对象。在定义该方法时,也无须在其throws子句中声明该方法可能抛出Error及其任何子类。

四、异常的捕获与访问

程序应该总是把Exception类的catch块放在最后࿰

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值