Java 编程思想 - 第十二章 通过异常处理错误

第十二章 通过异常处理错误

1.概念

  • 异常允许我们强制程序停止运行,并告诉我们出现了什么问题,或者强制程序处理问题,并返回到稳定状态。

2.捕获异常

try{
	//可能会出现异常的代码
}catch(Exception e){
	//捕获到异常后需要执行的代码,可以做日志记录
	e.printStackTrace();
}finally{
	//无论是否捕获到异常都会执行的语句块
}
//一个try语句块后面能跟多个catch语句块,若果有多个异常需要捕获,最好按照从小(精确)的异常到大(模糊)的异常顺序catch,以防最大的异常提钱捕获到精确类型异常。

3.创建自定义异常

  • 要自定义异常类,必须从已有的异常类继承。
public class MyException extends Exception{}

4.栈轨迹

  • printStackTrace()方法所提供的信息可以通过getStackTrace()方法来直接访问,这个方法将返回一个由栈轨迹中的元素所构成的数组,其中每一个元素都表示栈中的一帧。元素0是栈顶元素,并且是调用序列中的最后一个方法调用(这个Throwable被创建和抛出之外)。数组中的最后一个元素和栈底是调用序列中的第一个方法调用。

5.重新抛出异常

  • 使用throw来抛出一个异常对象,这个对象抛给上一级程序。
  • 异常链
    在Throwable子类中,只有三种基本的异常类提供了带cause参数的的构造器。他们是Error(用于Java虚拟机报告系统错误)、Exception以及RuntimeException。如果要把其它类型的异常链接起来,应该使用initCause()方法而不是构造器。
    -Throwable这个Java类被用来表示任何可以作为异常被抛出的类。Throwable对象可分为两种类型(指从Throwable继承而得到的类型):Error用来表示编译时和系统错误(除特殊情况外,一般不用关心);Exception是可以被抛出的基本类型,在Java类库、用户方法以及运行时故障中都可能抛出Exception型异常。

6.finally

  • finally语句块中的代码是无论如何都会被执行(即使涉及break、continue;会撤销掉涉及到的return),这个语句块通常被用来做内存释放。

7.异常使用指南

  • 在恰当的级别处理问题。(在知道该如何处理的情况下才捕获异常)
  • 解决问题并且重新调用产生异常的方法。
  • 进行少许修补,然后绕过异常发生的地方继续执行。
  • 用别的数据进行计算,以替代方法预计会返回的值。
  • 把当前运行环境下能做的事情尽量做完,然后把异常抛到更高层。
  • 终止程序。
  • 进行简化。
  • 让类库和程序更安全。

8.延伸

  • 8.1 final、finally与finalize的区别
  • 1)final
    Java中,final用作修饰词,可以修饰域、方法、类。用来修饰类表示该类不能被继承,并且类中的方法和域都隐式的被final修饰;修饰方法表示该方法不能被override;修饰域表示该域为常量。
  • 2)finally
    finally作为异常处理中的一个语句块,依赖于try/catch存在,表示一段无论如何都会执行的代码。
  • 3)finalize
    finalize()方法实在Object中定义的,每个对象都会有这么一个方法,此方法的作用是建议gc回收掉该对象。
  • 8.2 throw与throws的区别
  • 抛出异常有三种形式:1)系统自动抛出异常。2)throw。3)throws。
  • 系统自动抛异常
    当程序语句出现一些逻辑错误、主义错误或类型转换错误时,系统会自动抛出异常.
  • throw
    throw是语句抛出一个异常,一般是在代码块的内部,当程序出现某种逻辑错误时由程序员主动抛出某种特定类型的异常。
  • throws
    当某个方法可能会抛出某种异常时用于throws 声明可能抛出的异常。
  • throw与throws的区别
    1)throws出现在方法函数头;而throw出现在函数体。
    2)throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常对象。
    3)两者都是消极处理异常的方式,只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值