Exception 和 Error 有什么区别?

基本概念理解:

问题:

  • 请对比 Exception 和 Error?
  • 运行时异常与一般异常有什么区别?

Exception 和 Error 都是继承了 Throwable 类,在 Java 中只有 Throwable 类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型。

Exception 又分为可检查(checked)异常和不检查(unchecked)异常,可检查异常在源代码里必须显式地进行捕获处理,这是编译期检查的一部分。

如何处理好异常:

了解哪些 Error、Exception 或者 RuntimeException? 详情

NoClassDefFoundError 和 ClassNotFoundException 有什么区别?
当一个类找不到的时候,JVM有时候会抛出ClassNotFoundException异常,而有时候又会抛出NoClassDefFoundError。

ClassNotFoundException NoClassDefFoundError  
从java.lang.Exception继承,是一个Exception类型 从java.lang.Error继承,是一个Error类型 
当动态加载Class的时候找不到类会抛出该异常 当编译成功以后执行过程中Class找不到导致抛出该错误
一般在执行Class.forName()、ClassLoader.loadClass()或ClassLoader.findSystemClass()的时候抛出 由JVM的运行时系统抛出

 

 

 

 

 

 

掌握最基本的语法是必须的,

try-catch-finally 块   (catch不是必须的)

throw、throws 关键字等

异常处理的两个基本原则:

尽量不要捕获类似 Exception 这样的通用异常,而是应该捕获特定异常

不要生吞(swallow)异常

异常处理机制带来的额外的开销:

  1. try-catch 代码段会产生额外的性能开销,或者换个角度说,它往往会影响 JVM 对代码进行优化,所以建议仅捕获有必要的代码段,尽量不要一个大的 try 包住整段的代码;与此同时,利用异常控制代码流程,也不是一个好主意,远比我们通常意义上的条件语句(if/else、switch)要低效。
  2. Java 每实例化一个 Exception,都会对当时的栈进行快照,这是一个相对比较重的操作。如果发生的非常频繁,这个开销可就不能被忽略了。

Java核心技术面试精讲 - 02

猜你喜欢

转载自blog.csdn.net/u013025748/article/details/114302982