根类
java.lang.Throwable
其下分Error、Exception(即异常)
Error通常出现在内存溢出、系统崩溃时。
Exception分为编译时异常与运行时异常,前者必须处理,后者可选处理。
- 编译时异常 CheckedException
- 运行时异常 RuntimeException
在异常处理中,常用的方法有(Throwable类的方法):
- printStrackTrace()【打印异常的详细信息】
- getMessage()【获取异常发生的原因】
编译时异常 CheckedException
需要显式处理,即使用try...catch/throw进行处理。体现了java设计的哲学,没有完善错误处理的代码没有机会被执行。
- try...catch使用时机:当前方法知道如何处理该异常
- throw/throws使用时机:当前方法不知道如何处理该异常
运行时异常 RuntimeException
当代码在运行时才发生的异常,编译时不需要try...catch。由系统自动检测并将他们交给缺省的异常处理程序。
假设存在处理要求,也可以显示捕获他们。
常见的运行时异常:
空指针异常 NullPointerException 出现原因:调用了未经初始化的对象或不存在的对象
- 指定的类找不到 ClassNotFoundException 出现原因:类的名称和路径加载错误;通常都是程序试图通过字符串来加载某个类时可能引发的异常
- 数字格式异常 NumberFormatException 出现原因:字符型数据中包含了非数字型字符
- 数据类型转换异常 ClassCastException
- SQL异常 SQLException 出现原因:常见于操作数据库时的SQL语句错误
- 数学计算异常 ArithmeticException 出现原因:除零错误 by zero
- 数组索引越界异常 ArrayIndexOutOfBoundsException 出现原因:当使用负数或大于等于数组长度的索引值时
- 文件找不到异常 FileNotFoundException
小知识点
Tip1:自定义异常要搞清楚是编译时异常(继承自Exception)还是运行时异常(继承自RuntimeException)。
Tip2:运行时异常(RuntimeException)被抛出(throw)可以不处理,即:不捕获(catch)也不声明(throws)。
Tip3:父类方法没有抛出异常,子类重写父类该方法也不可抛出异常,只能catch处理。如果父类抛出了多个异常,子类只可抛出相同异常或此异常子集。
Tip4:若finally中有return语句,则永远返回finally中的结果,应避免。