Java异常的一些笔记(二)

Java异常的一些笔记

异常的相关知识学起来并非艰涩难懂,它属于那种可以使你的项目收益明显,立竿见影的特性之一。

  • 正常执行过程中做什么事的代码与出了问题怎么办的代码相分离
  • 所有标注异常类都有两个构造器,一个是默认构造器,另一个是接受字符串作为参数。
  • 简单的把异常处理看成一种不同的返回机制

监控区域,try块

try{

} catch(Type1 id1){

} catch(Type2 id2){

}
//etc

与switch不同,每一块后面要跟break。

  • 异常处理有两种模型:终止模型和恢复模型。一般用终止模型,恢复模型不能抛出,要借用while进行不断尝试try,这样导致耦合性高。

  • 重新抛出异常,printStackTrace()方法显示的将是原来异常抛出点的调用栈信息,而并非重新抛出点的信息。要想更新这个 信息,可以调用 fillInStackTrace()方法,返回的是一个Throwable对象。

  • 有可能在捕获异常之后抛出另一种异常,这么做的话类似于使用fillInStackTrace(),有关原来的异常信息发生点的信息会丢失,剩下新的异常点有关信息。异常链是捕获一个异常后抛出另一个异常,并且把原始异常的信息保存下来。
    Throwable的子类构造器接受一个cause对象作为参数。

  • RuntimeException是一个特例,不受检查异常,不需要捕获直达main()方法,自动捕获,不必自己亲自动手的异常。

  • finally一般用于除垃圾回收机制外的如,打开的文件或者网络连接,或者是某个开关。提供代码健壮性。即使是没有捕获到异常也会处理,涉及break和continue的语句,finally也会执行。return语句中,也会执行finally语句。

  • 当覆盖异常方法的时候,只能抛出在基类方法的异常说明里列出的那些异常。基类覆盖方法的时候,可以不抛出异常。转型成基类则编译器会要求捕获基类方法的异常。

  • 异常在编写构造器的时候可能出现异常,导致finally的清理也无法正常工作,这样可能导致打开的文件或者连接无法正常关闭,这时候需要特别注意,通用的清理惯用法是在构造器不抛出任何异常时也能运用,在创建需要清理的对象之后,立即进入一个try-finally语句快。

try{
     A a = new A();
     try {
           B b = new B();
     } finally{
           b.dispose();
    }
} finally {
     a.dispose();
}
  • 基类异常能够匹配派生类异常,基类异常如果放到catch子句前面,会把派生类异常全给吃掉。

重要原则:只有在你知道如何处理的情况下才捕获异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值