- [x] Error 和 Exception有什么区别
- [x] 什么是受检查的异常,什么是运行时异常
运行时异常与一般异常有何异同- [ ] 什么是异常链
- [x] throw 和 throws 有什么区别?
- [ ] 简述一个你最常见到的runtime exception(运行时异常)
一、Error和Exception有什么区别?
联系:
Error和Exception都继承自Throwable,RuntimeException继承自Exception。Throwable从Object直接继承而来,并且实现了Serializable接口。
Error和RuntimeException及其子类称为未检查异常(Unchecked Exception),其他异常称为受检查异常(Checked Exception)。
区别:
Error用于标记严重错误,一般是指与虚拟机相关的问题,如系统崩溃、内存空间不足、方法调用栈溢出等。如java.lang.StackOverFlowError和java.long.OutOfMemoryError。
这类错误导致应用程序中断,程序不必处理,建议让程序终止。Exception类表示程序可以处理的异常,可以捕获且可能恢复。
二、运行时异常和受检查的异常
Exception又分为运行时异常(Runtime Exceptin)和受检查的异常(Checked Exception)。
RuntimeException: 运行时异常是因为程序员执行了错误操作,Java编译器不会去检查。这类异常即使没有try/catch捕获,也没用throws抛出,编译还是会通过。如除数为零的ArithmeticException、错误的类型转换、数组越界和试图访问空指针等。
受检查的异常:这类异常一般是应用环境中出现的外部错误,如果没有try/catch,也没有throws抛出,编译不会通过。如文件找不到、试图从文件尾后读取数据等。
三、什么是异常链?
异常链是一种面向对象编程技术,指将捕获的异常包装进一个新的异常并重新抛出的异常处理方式。该技术大多用于将“受检查异常”(checked exception)封装成为“非受检查异常”(unchecked exception)或者RuntimeException。
如果因为异常决定要抛出一个新的异常,一定要包含原有的异常,这样,处理程序才可以通过getCause()和initCause()方法来访问异常最终的根源。
四、throw和throws的区别
用户程序自定义的异常和应用程序特定的异常,必须借助于throw和throws语句来定义抛出异常。
- throw是语句抛出异常,用在方法体内,抛出的是具体异常的实例,由方法体内的语句处理。
- throws在方法的声明中抛出异常,用在方法声明后面,抛出的是可能出现的异常,自己不去处理,由方法的调用者处理。throw可以中断程序运行,因此可以用来代替return,最常见的例子是用throw在一个空方法中需要return的地方抛出UnSupportedOperationException。
private static void show() {
throw new UnsupportedOperationException("Not yet implemented");
}
参考资料: