java中异常分为两大类,Error,Exception 都继承 Throwable 类。
Error
通常是程序正常情况不会出现的异常,大多数error会导致程序自身,jvm处于非正常状态。如OutOfMemoryError ,不需要捕获一般由虚拟机自行处理。
Exception
属于程序运行过程中,可以预料的意外情况,一般需要捕获并处理。
Exception又可分为检查异常(除了非检查异常外的Exception及其子类),非检查异常(派生于Error类或RuntimeException类的所有异常)。
检查异常, 源代码里必须显式地进行捕获处理,这是编译期检查的一部分。
非检查异常就是所谓的运行时异常,类似 NullPointerException、ArrayIndexOutOfBoundsException之类。具体根据需要来判断是否需要捕
获,并不会在编译期强制要求。
异常处理
-
try,catch时避免try包住一整块代码,仅捕获有必要的代码块。
-
避免捕获通用异常? 但是又会保留隐藏异常对程序有隐患?
-
尽量以日志输出异常堆栈信息,避免使用e.printStackTrace()
-
Java每实例化一个Exception,都会对当时的栈进行快照,这是一个相对比较重的操作。性能优化时可以考虑。
网友评论