异常时指程序运行过程中所发生的不正常的事件,它会中断正在运行的程序。
Java编程语言使用异常处理机制为程序提供了错误处理的能力。
处理异常通过5个关键字来实现:try,catch,finally,throw,throws
try:执行可能会出现异常的代码
catch:捕获异常
finally:无论是否发生异常,代码总能执行
throws:声明方法中可能要抛出的各种异常
throw:手动抛出异常
try块中所有语句正常执行完毕,没有异常,catch块中的所有语句都将被忽略
try块中执行遇到异常,try块中剩余的程序都会被忽略,系统自动生成相应的异常对象,如果这个异常对象与catch中声明的异常类型匹配,则相应的catch块将被执行。如果不匹配,程序会中断。
异常对象常用的方法名:
方法名 | 说 明 |
void printStackTrace() | 输出异常的堆栈信息 |
String getMessage() | 返回异常信息描述字符串, 是printStackTrace()输出信息的一部分 |
常见的异常类型
异 常 类 型 | 说 明 |
Exception | 异常层次结构的父类 |
ArithmeticException | 算术错误情形,如以零作除数 |
ArrayIndexOutOfBoundsException | 数组下标越界 |
NullPointerException | 尝试访问 null 对象成员 |
ClassNotFoundException | 不能加载所需的类 |
IllegalArgumentException | 方法接收到非法参数 |
ClassCastException | 对象强制类型转换出错 |
NumberFormatException | 数字格式转换异常,如把"abc"转换成数字 |
多重catch块
排列catch块顺序:先子类后父类。发生异常按顺序逐个匹配。只执行第一个类型匹配的catch语句。
在catch块后面加上final块,除了类似catch块中有“System.exit(0);”中断程序,退出虚拟机外,任何情况都会执行。return语句会先执行return前先执行finally块。
声明异常 throws
Java语言中通过关键字throws声明某个方法可能抛出的各种异常。
throws可以同时声明多个异常,多个异常用逗号隔开。
抛出异常 throw
除了系统自动抛出异常外,在编程过程中,我们往往遇到这样的情形:有些问题是系统无法自动发现并解决的,如年龄不在正常范围内、性别输入不是“男”或“女”等,此时需要程序员而不是系统来自行抛出异常,把问题提交给调用者去解决。
throw和throws的区别
throw和throws的区别表现在以下三个方面
作用不同: throw用于在程序中抛出异常; throws用于声明在该方法内抛出了异常。
使用的位置不同:throw位于方法体内部,可以作为单独语句使用; throws必须跟在方法参数列表后面,不能单独使用。
内容不同: throw抛出一个异常对象,而且只能是一个;throws后面跟异常类,而且可以跟多个异常类。
异常的分类
自定义异常
当JDK 中的异常类型不能满足程序的需要时,可以自定义异常类。
异常处理原则
异常处理与性能
异常只能用于非正常情况
不要将过于庞大的代码块放在try中
在catch中指定具体的异常类型
需要对捕获的异常做处理