1 Error 与 Exception 概述
- Error 是用户无法处理的错误,Exception 是捕获后可以尝试恢复的异常。
- 常见的错误与异常:
- Error:
- ClassNoDefFoundError:找不到类定义错误
- 导致原因:
(1) 类依赖的 class 或 jar 文件不存在了,比如编译之后删除;
(2) 依赖的文件存在,但并不在同一个域中;
(3) javac 编译时无视文件名大小写,导致得到的 class 文件可能与我们想要的不同;
- 导致原因:
- StackOverflowError:深递归导致的栈溢出
- OutOfMemoryError:内存溢出错误
- ClassNoDefFoundError:找不到类定义错误
- Exception:
- RuntimeException:运行时异常,只在程序运行时抛出
- NullPointerException:空指针异常
- ClassCastException:类转换异常
- IndexOutOfBoundsExcpetion:索引越界异常
- IllegalArgumentException:传递非法参数异常
- CheckedException:受检查异常,在编译期间检查
- IOException
- ClassNotFoundException
- RuntimeException:运行时异常,只在程序运行时抛出
- Error:
2 异常处理
- Java 异常处理机制
- 捕获:寻找合适的异常处理器进行处理;
- 抛出:创建异常对象,交由运行时系统处理;
- 异常处理原则
- 具体明确:异常的类名和参数要准确描述异常的类型和导致原因;
- 提早抛出:有助于准确定位异常位置;
- 延迟捕获:将异常处理范围扩大,掌握更多信息有助于处理异常;
- 异常处理的缺点
- try-catch 代码块影响 JVM 优化;
- 创建异常对象需要保存栈快照等信息。