1、异常类层次图
Object是Java中一切类的基类。
Throwable是Java异常类中的基础类,其有两个子类:Error和Exception。
Exception是指能够预料到的异常,比如IOException等。Exception又分为可检查和不可检查异常。可检查异常有IOException等,这类异常必须在编码阶段强制对其捕获,进行异常处理。不可检查异常有NullPointerException等异常,这类异常不会强制被捕获,往往是由于逻辑错误导致的异常。
Error是指不太正常的比较严重的错误,比如OutOfMemoryError等。Error比Exception严重的多,往往不可恢复。
2、throws 和 throw:
Java中throw和throws是成对使用的。throw可以将异常抛出到上层调用方。throw 出现在方法体内用来抛出实际异常实例,throws 写在方法体后边用来声明该方法要抛出的异常类型。
3、ClassNotFoundException和NoClassDefFoundError区别
3.1、ClassNotFoundException
当调用Class.forName()、ClassLoader.loadClass()和ClassLoader.findSystemClass()时,如果找不到类的时候会报这个异常。
3.2、NoClassDefFoundError
这种错误发生在,在编译期间正常,而在程序运行期间找不到对应的类。比如当new对象的时候,却找不到对应的类。造成原因有打jar包时漏掉了一些类,或者jar包出现了损坏。
4、加异常的两大原则
1、捕捉异常的时候要具体,不利于代码的阅读和处理。
2、捕捉到异常之后要处理,不能不管不顾。一般要打印出相关信息到日志中,包括异常发生的时间、方法、参数等信息,便于后期分析处理。
5、捕捉异常对性能的影响
1、try catch不应该包括太多的代码,因为JVM对try catch 中的代码无法被优化,所以只需要对必要的代码try catch。
2、当捕捉异常的时候,需要对异常类型进行实例化,会对异常的栈信息实例化,当发生异常的次数多了,也会消耗不小的资源。