Exception和Error的区别
(1)Exception和Error都继承Throwable,java中只有Throwable类型的实例才能被抛出(throw)或捕获(catch)。
(2)Exception是可以预料到的意外情况,应该被捕获进行相应的处理。Exception又分为可检查(checked)异常的和不检查(unchecked)异常。可检查异常必须显示地进行捕获处理,这是编译期检查的一部分。不检查异常又叫运行时异常(RuntimeException),通常是编码时可以避免的,编译器不强制检查。
(3)Error是正常情况下,不大可能出现的情况。绝大部分的Error都可能导致程序处于非正常、不可恢复状态,无需捕获。
常见的子类
Error : OutOfMemoryError
不检查异常:NullPointerException,ArrayIndexOutOfBoundsException
NoClassDefFoundError和ClassNotFoundException的区别
(1)ClassNotFoundException是检查异常。
当通过name动态地加载类,在classpath找不到对应的class文件时会出现该异常:
Class.forName(name)
ClassLoader.loadClass、
ClassLoader.findSystemClass
(2)NoClassDefFoundError是Error。
通常是通过new创建一个新的对象,但是找不到对应的类时出现。
类在编译时能找到,在运行时却找不到,会出现NoClassDefFoundError,通常是jar包冲突引起的。
throw和throws的区别
throw作用于函数体里面,用来抛出一个异常。
throws出现在函数头,用来表明可能出现的异常。
try-with-resources
try-with-resources能够确保try语句结束时关闭资源,无需再将处理资源关闭的代码写在finally块中,前提资源必须是实现了AutoClosable接口。
网友评论