第10章 异常处理

1.Java异常处理机制

(1)使用try…catch捕获异常

当Java运行时环境收到异常对象时,会寻找能处理该异常对象的catch块,如果找到合适的catch块,则把该异常对象交给catch块处理,这个过程称为捕获(catch)异常。

(2)try块里声明的变量是代码块内局部变量,它只在try块内有效,在catch块内不能访问。

(3)Java把所有非正常情况分为两种:异常(Exception)和错误(Error)。 它们都继承Throwable父类。Error错误,一般指与虚拟机相关的问题,如系统崩溃、虚拟机错误、动态链接失败等,这种错误无法恢复或不可能捕获,将导致应用程序中断。

(4)异常捕获时,先捕获小异常,再捕获大异常。

(5)捕获多种异常时,异常变量用隐式的final修饰,但捕获一种类型异常,则不用final修饰。

(6)访问异常信息:(常用方法)

      getMessae():返回异常的详细描述字符串

      printStackTrace():将该异常的跟踪栈信息输出到标准错误输出

      getStackTrace():返回该异常的跟踪栈信息

(7)使用finally回收资源:Java的垃圾回收机制不会回收任何物理资源,垃圾回收机制只能回收堆内存中对象所占用的内存。一般finally处于catch块之后,系统一定会执行finally代码块。除非在异常代码中使用System.exit(1)语句退出虚拟机。

(8)当Java程序执行try块、catch块时遇到了return或throw语句,这两个语句都会导致该方法立即结束,但是系统执行这两个语句并不会结束该方法,而是去寻找该异常处理流程中是否包含finally块,如果没有finally块,程序立即执行return或者throw块,,方法终止;如果有finally块,系统立即开始执行finally块,只有当finally块里也使用了return或者throw等导致方法终止的语句,finally块已经终止了方法,系统将不会跳回去执行try块、catch块中的代码。

(9)异常处理嵌套:在try关键字后紧跟一对圆括号,圆括号可以声明、初始化一个或多个资源(必须在程序结束时显示关闭的资源)

 

2.Checked异常和Runtime异常体系

所有的RuntimeException类及其子类的实例被称为Runtime异常,不是RuntimeException类及其子类的异常实例则被称为Checked异常。

(1)使用throws声明抛出异常:当前方法不知道如何处理这种类型的异常,该异常由上一级调用者处理。

(2)Throws声明抛出只在方法签名中使用并可以抛出多个异常类。如:

public static void main(String[] args) throws IOException
{…}

(3)方法重写时子类方法抛出的异常不能比父类方法更大的异常

 

3.使用throw抛出异常

如果throw语句抛出的异常是Checked异常,则该throw语句要么处于try块里,显式捕获该异常,要么放在一个带throws声明抛出的方法中,即把该异常交给该方法的调用者处理;如果throw抛出Runtime异常,则该语句无须放在try块里,也无须放在带throws声明抛出的方法中,程序既可以显式使用try…catch来捕获并处理该异常,也可以不用理会直接交给该方法调用者处理。

 

4.异常链

层与层之间有非常清晰的划分,上层功能的实现严格依赖于下层的API,也不会跨层访问。

把原始异常信息隐藏起来,仅向上提供必要的异常提示信息的处理方式,符合面向对象的封装原则。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值