1、Exception 和 Error
Exception和Error都继承Throwable类,只有Throwable类的实例才可以抛出。Exception是可以预料的意外情况,可以被捕获进行相应的处理。而Error是不太可能出现的情况,可能会造成程序终止,如OutOfMemoryError(内存溢出)。Exception分为可检查(checked)异常和不检查(unchecked)异常,可检查异常必须显式捕获处理,不检查异常就是运行时异常。如NullPointerException。
常见的 Exception
NullPointerException(空指针异常)ArrayIndexOutOfBoundsException(数组越界异常)NoSuchFileException(文件没有找到异常)InterruptedException(线程被打断异常)ClassCastException(类型转换异常)
常见的 Error
NoClassDefFoundError(类没有被找到错误)OutOfMemoryError(堆内存溢出错误)StackOverflowError(栈内存溢出错误)
2、try-catch-finally
| |
注意
- 尽量不要捕获
Exception类型的异常,具体异常具体处理。 - 不要生吞(swallow)异常,避免错误后出现难以诊断的情况,可以输出到日志中。
Java 的异常处理机制会有额外的开销
- try-catch 的代码段会影响 JVM 的优化,尽量只捕获有必要的代码段。
- Java 每实例化一个
Exception,就会对当前栈进行快照。