Java语言07之异常体系

1 异常体系

在这里插入图片描述
Java把所有的非正常情况细分为三类:Error(错误),RuntimeException(运行时异常),checked Exception(受检异常、编译时异常)。

  • Error:一般是指与虚拟机相关的问题,如系统崩溃、虚拟机错误、宕机等等,这种错误无法恢复和不可捕获。
  • RuntimeException运行时异常:运行时异常简单说就是程序员自己犯的错误,这类错误需要自己检错来改正。如IndexOutOfBoundsException(索引越界异常)、ClassCastException(类型转换异常)等等,通常发生错误时,我们可以通过控制台报错信息找到目标进行修改。
  • checked Exception(编译期异常,IDE会主动报出来的错误):Exception子类除了RuntimeException之外均是checked Exception,这类错误必须在编写代码时就对它们进行处理,采用try catch机制处理或者通过throws交由调用者来处理。比如IO异常、ClassNotFoundException。

2 异常处理

2.1 异常处理

  • try {} catch(一个或者多个异常) {}
  • try {} catch(一个或者多个异常) {} finally {} :finally是无论发生异常与否,均为执行其中的内容。通过用于进行回收资源。但也有例外,如果强制退出JVM,finally中的内容就不会得到执行。
  • 使用throws是将异常抛出,谁调用该方法,谁就去处理它。
  • try (流资源) {} catch(一个或者多个异常) {} finally {}:Java7增强的资源回收:如果用finally进行流资源回收,当流资源比较多时,代码会非常冗长,显得十分臃肿。所以Java7对流资源回收进行了增强。

2.2 throw和throws

  • throws:用来声明一个方法可能产生的所有异常,不做任何处理而是将异常往上传,谁调用我我就抛给谁。
  • throw:主动地抛出一个具体的异常类型

2.3 final、finally、finalize

  • final:用于声明属性、方法和类,分别表示属性不可变、方法不可覆盖、类不可被继承
  • finally:作为异常处理的一部分,它只能用在try/catch语句中,并且附带着一个语句块,表示这段语句最终一定被执行,经常被用在需要释放资源的情况下
  • finalize:即使在可达性分析算法中判定为不可达的对象,也不是“非死不可”的,要真正宣告一个对象死亡,至少要经历两次标记过程:如果对象在进行可达性分析后发现没有与GC Roots相连接的引用链,那它将会被第一次标记,随后进行一次筛选,筛选的条件是此对象是否有必要执行finalize()方法。假如对象没有覆盖finalize()或者finalize()已经被虚拟机调用过,那么虚拟机将这两种情况都视为“没有必要执行”。被判定为需要执行的对象将会被放在一个叫做F-Queue的队列中进行第二次标记,除非这个对象与引用链上的任何一个对象建立关联,否则就会被真的回收。

2.4 finally什么情况不会执行

  • try语句没有被执行到,如在try语句之前return就返回了,这样finally语句就不会执行。
  • 在执行try语句块或者catch语句块时被终止了,与其相对应的finally语句块可能不会执行。
  • 如果finally是在守护线程里面,如果其他线程都执行完了,守护线程需要立即停止,退出虚拟机,这时候finally也有可能没有执行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值