标签:res 16px cep interrupt 基于 rup multiple source ssd
典型的回答是这样的:
Exception 和 Error都继承了Throwable类,在java中只有Throwable类型的实例才可以被抛出(Throw)或者捕捉(catch),它是异常处理机制的基本组成类型。
Exception是程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应的处理。
Error指在正常情况下,不大可能出现的情况,绝大部门的Error都会导致程序处于非正常的,不可恢复状态。既然是非正常情况,所以不便于也不需要捕获。比如常见的OutOfMemoryError之类,都是Error的子类。
Exception类又分为可检查异常(checked)和不检查异常(unchecked),可检查异常在源码里必须显示的进行捕获处理,这是编译期检查的一部分。
不检查异常就是所谓的运行时异常,类似NullPointerException,ArrayIndexOutOfBoundsException之类,通常是可以编码避免的逻辑错误。
考点分析:
分析Exception 和 Error的区别,是从概念角度考察了Java处理机制,总的来说,还处于理解层面,面试者只要阐述清楚就好。
在日常的编程中如何处理好异常呢?
第一,理解Throwable,Exception,Error的设计和分类。比如,掌握应用广泛的子类,以及如何自定义异常,如下图:
有些子类需要重点理解下,比如NoClassDefFoundError 和 ClassNotFoundException有什么区别,这也是经典的题目。
第二,理解Java语言中操作Throwable的元素和实践。如try-catche-finally块,throw,throws关键字等,随着JAVA语言的发展,引入了更加便利的特性,比如try-with-resources和multiple catch。代码如下
try(BufferedReader br = new BufferedReader(br)){ }catch(Exception | IOExcetion e){ }
知识扩展:
前面谈了很多概念性的东西,接下来结合一些代码用例进行分析。
try { // 业务代码 // Thread.sleep(1000L); } catch (Exception e) { // }
这段代码很短,但是已经违反了异常处理的两个基本原则。
第一,尽量不要捕获类似Exception这样的通用异常,而是应该捕获特定异常。
Thread.sleep(1000L);这段代码抛出的InterruptedException。
第二,不要生吞异常
生吞异常往往是基于假设这段代码可能不会发生,或者感觉忽略异常时无所谓的。来看第二段代码,如下
try { // 业务代码 // } catch (IOException e) { e.printStackTrace(); }
这段代码没有任何问题,但是不要这么处理。
我们从性能角度来审视JAVA的异常处理机制,有两个可能会相对昂贵的地方:
标签:res 16px cep interrupt 基于 rup multiple source ssd
原文地址:https://www.cnblogs.com/zhjxtf/p/9355892.html