CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛
CXYVIP官网源码交易平台_网站源码_商城源码_小程序源码平台-丞旭猿论坛

Java中的异常处理-永久免费的源码丞旭猿

在Java开发中,异常处理是一定会使用的。为此,对异常处理机制的考察也成了Java面试中必不可少的内容。


如果您是JAVA初学者,想在老师指导下学习,可以看看这个!

【Java入门必备】超适合小白的0基础课程:直播课+编码实现+辅导答疑
已失效

在面试中,你是否经常能遇到这样的问题?

问题1:Java中的受检异常和非受检异常有什么区别?

在Java中,所有异常类都继承自Throwable这个类。Jdk文档是这样描述它的:

The Throwable class is the superclass of all errors and exceptions in the Java language. Only objects that are instances of this class (or one of its subclasses) are thrown by the Java Virtual Machine or can be thrown by the Java throw statement. Similarly, only this class or one of its subclasses can be the argument type in a catch clause. For the purposes of compile-time checking of exceptions, Throwable and any subclass of Throwable that is not also a subclass of either RuntimeException or Error are regarded as checked exceptions.在Java语言中,Throwable类是所有Error类和Exception类的父类。只有Throwable类或者其子类的实例才能被Java虚拟机或者throw子句抛出。相似的,只有Throwable类或者其子类才能作为catch子句的参数类型。为了达到编译时核对异常的目的,Throwable类及其子类(但不包括RuntimeException及Error的子类)都被视为受检异常。

从受检异常和非受检异常的视角,Java中的异常结构如下图。

所谓受检异常,即程序员在编写代码时必须要进行处理的异常。而非受检异常,指的是RuntimeException及其子类。

问题2:在进行异常处理时,finally一定要有吗?它的处理过程是怎样的?

在进行异常处理时,可以选择指定finally子句(不一定要有)。以下面的结构为例,来讲解下finally的执行过程。

try{statementA;returnstatementB;}catch(Exceptione){returnstatementC;}finally{statementD;}

当程序正常执行的时候,先执行statementA -> statementB -> statementD -> 返回statementB的值。这里面经常涉及的面试题是statementB是一条语句比如a+b,程序一定是先计算a+b,然后执行statementD,然后再把先前计算好的a+b的值作为结果返回。

当程序有异常发生的时候,比如statementA发生了异常,则执行顺序为statementA -> statementC -> statementD -> 返回statementC的值。

问题3:Java中的异常链是怎么回事?

对于Java异常处理中的异常链机制,Jdk文档有简单明了的描述,它是这样说的:

A throwable contains a snapshot of the execution stack of its thread at the time it was created. It can also contain a message string that gives more information about the error. Over time, a throwable cansuppressother throwables from being propagated. Finally, the throwable can also contain acause: another throwable that caused this throwable to be constructed. The recording of this causal information is referred to as thechained exceptionfacility.一个Throwable在被创建的时候就包含了当前线程栈信息的快照。它也包含一个信息串用来描述异常的相关信息。Throwable也能够防止其他的Throwable扩散。而且,Throwable也可以包含一个cause:导致当前异常被创建的另一个异常。这种因果信息的记录被称为异常链。

从文档中可知,所谓异常链,即:异常A内部记录了其是由异常B导致、异常B内部记录了其是由异常C导致、异常C内部记录了其是由异常D导致,一直记录到最初发生异常的根异常。

异常链的维护可以有两种方式:通过构造函数比如Throwable(Throwable cause)或者是通过 initCause(Throwable cause)方法。

问题4:在异常处理过程中,有哪些比较好的实践?

关于异常的最佳实践,可以在《Effective Java》一书的第9章找到答案。

  1. 只针对异常的情况才使用异常:永远不要将它们用于正常的控制流。
  2. 按照惯例,Error往往被JVM保留用于表示资源不足、约束失败、或者其他使程序无法继续执行的情况。这已经是个几乎被普遍接受的惯例,因此,不要再实现任何新的Error子类。自定义的未受检异常类都应该继承自RuntimeException类。
  3. 优先使用Java类库提供的未受检异常,它们满足了绝大多数API的异常抛出需要。
  4. 多数情况下,应该使用异常链将低层的异常(原因)传递给高层的异常,这对调试问题很有帮助。
  5. 不要吃掉异常!不要吃掉异常!不要吃掉异常!如果你catch了某个异常,一定要在catch块中处理这个异常,或者再次向上抛出该异常。空的catch块会使异常达不到应有的目的。

本文以四道常见的面试题为主线,介绍了Java中的异常处理。下次面试的时候,你能给面试官讲清楚了吗?@E-臻

一个介绍Java学习路线的Live:(已有3000+人收听,5200+人支持)

一个介绍入门云计算的Live:(通俗易懂的云计算知识,怎么可以不了解?)

义臻
24 次咨询
5.0
软件工程系硕士
2475 次赞同
去咨询

声明:本文部分素材转载自互联网,如有侵权立即删除 。

© 版权声明
THE END
喜欢就支持一下吧
点赞0赞赏 分享
相关推荐
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容