异常是程序中的一些错误,但并不是所有的错误都是异常。
异常体系
Throwable类是Java语言中所有错误或异常的超类,它有两个子类分别是Error,Exception.
Error(错误)是Throwable的子类,Error一般是指程序的严重错误,一般不被捕获,只能抛出。
Exception(异常/例外)是Throwable的子类,Exception可以捕获也可以抛出。
.异常的处理方式
抛出异常:
1 声明抛出异常
1)在方法签名上声明,具体是在参数列表后,大括号前,使用throws异常类名来声明
例:
public static void test(int a) throws ArithmeticException{}
2)声明异常,不一定就会抛出异常
3)如果有异常要抛出,就是将异常信息以标准错误流打印到控制台
4)throws后面可以写多个异常类名,中间用 , 隔开。该方法可以抛出多种异常,但不是同时抛出多种异常
5)程序抛出异常,那么程序就会在抛出异常处停止,不再向下执行
6)异常抛出是向上抛出,即抛给方法调用者,一层一层向上抛,直到main方法,main方法抛出到控制台。
2 主动抛出异常
1)在程序中是以throw主动抛出异常对象
2)throw异常对象:
private static void m(int n) throws MyException1, MyException2 {
if (n == 1) {
throw new MyException1("n==1");
} else {
throw new MyException2("n==2");
}
}
}
3 throw和throws的区别:
1)作用:throw是抛出异常对象,throws是声明异常类型的
2)位置:throw是在方法体重,throws是在方法签名上
3)写法:throw后面跟异常对象,且只能是一个对象
throws后面跟异常类名,且可以写多个异常类名
捕获异常
使用try和catch关键字可以捕获异常。try/catch代码块放在异常可能发生的地方,try/catch代码块称为保护代码,语法如下:
try {
//程序代码
} catch (Exception e) {
// catch 块
}
}
catch语句包含要捕获异常类型的声明,当保护代码块中发生一个异常时,try后面的catch块就会被检查。如果发生的异常包含在catch块中,异常会被传递到该catch块。
finally关键字
finally关键字用来创建在try代码块后面执行的代码块
无论是否发生异常,finally代码块中的代码总会被执行
在finally代码块中,可以运行清理类型收尾善后性质的语句
finally出现在catch最后,语法如下:
try {
//程序代码
} catch (异常类型1 异常变量名1) {
// 程序代码
} catch (异常类型2 异常变量名2) {
// 程序代码
} finally {
//程序代码
}
}
自定义异常
检查型异常类需要继承Exception类
运行时异常类需要继承Runtimeexception类
public class MyException1 extends Exception {
public MyException1() {
}
public MyException1(String message) {
super(message);
}