异常是指在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序
常见的异常类
异常类型 | 说明 |
Exception | 异常层次结构的父类 |
ArithmeticException | 算术错误情形,如以零作除数 |
ArrayIndexOutOfBoundsException | 数组下标越界 |
NullPointerException | 尝试访问 null 对象成员 |
ClassNotFoundException | 不能加载所需的类 |
IllegalArgumentException | 方法接收到非法参数 |
ClassCastException | 对象强制类型转换出错 |
NumberFormatException | 数字格式转换异常,如把"abc"转换成数字 |
异常对象常用的方法
void printStackTrace() | 输出异常的堆栈信息 |
String getMessage() | 返回异常信息描述字符串, 是printStackTrace()输出信息的一部分 |
异常处理机制
Java的异常处理是通过5个关键字来实现的:try、catch、 finally、throw、throws
使用try-catch 结构进行异常捕捉和处理 把可能出现异常的代码放入try语句中 并使用catch语句捕捉异常
使用try-catch-finally 处理异常 try-catch-finally结构中try是必须存在的 catch、 finally语句块为可选 但两者必须出现一个
使用多重catch处理异常 一段代码可能会引发多种类型的异常 这是可以在一个try语句后跟多个catch语句块处理不同的异常 但排序必须是从雷子到父类 最后一个一般都是Exception类 如果把父类异常放在前面后面的catch语句块将不会获得执行机会
使用throws声明抛出异常
通过try-catch捕捉并处理异常 通过throws继续声明异常 如果调用者不知道如何处理该异常可以继续通过throws声明异常 让上一级调用者处理异常 main()方法声明的异常将由java虚拟机来处理
使用throw抛出异常
throw关键字来自行抛出异常 抛出异常的原因在于当前环境无法解决参数问题 因此在方法内部通过throw抛出异常 把问题交给调用者去解决
throw | throws |
生成并抛出异常 | 声明方法内抛出了异常 |
位于方法体内部,可作为单独语句使用 | 必须跟在方法参数列表后面,不能单独使用 |
抛出一个异常对象,且只能是一个 | 声明抛出异常类型,可以跟多个异常 |
自定义异常
自定义异常类并继承Excepion或RuntimeException 编写异常类的结构方法并继承父类的实现 常见构造方法由4种形式
构造方法1
public MyExcepion(){
super();
}
构造方法2
public MyExcepion(String message){
super(message);
}
构造方法3
public MyExcepion(String message,Throwable cause){
super(message, cause);
}
构造方法4
public MyExcepion(Throwable cause){
super( cause);
}