关于异常的经典面试题:
Java与异常相关的类结构和主要继承关系是怎样的?
Java7在关于异常的语法上做了什么改进?
什么是运行时异常和声明式异常?它们有什么区别?
什么是“异常丢失(异常覆盖)”问题?
什么是异常链?
什么是返回值覆盖?
编写异常时的一些最佳实践?
异常的结构层次结构图
我们的关注点可能主要在四个类上:
Throwable
Error
Exception
RuntimeException
其中,因为Error代表“错误”,多为比较严重的错误。如果你了解JVM,应该对OutOfMemoryError和StackOverflowError这两个类比较熟悉。
一般我们在写代码时,可能用的比较多的是Exception类和RuntimeException类。
那到底是继承Exception类好还是继承RuntimeException类好呢?后面我们在“编写异常的最佳实践”小节会讲到。
Java7与异常
Java7对异常做了两个改进。第一个是try-with-resources,第二个是catch多个异常。
所谓的try-with-resources,是个语法糖。实际上就是自动调用资源的close()函数。和Python里的with语句差不多。