异常
Java提供了许多异常自动处理机制,这里主要聊一下异常的主动抛出
异常处理机制
异常处理五个关键字 try、catch、finally、throw、throws
try—catch—finally
int a = 1;
int b = 0;
try{
System.out.println(a/b);
}catch(异常的类 对象){
//要进行的操作
}finally{
//无论是否出现异常,finally都会执行
}
解释
当try中的保护代码块出现异常时,异常会作为参数与catch中声明的异常类型进行匹配,匹配成功则运行对应catch的代码块
- 不管是否出现异常,会继续执行后续代码
注意
- 可以有多个catch,异常类型由上往下判断,且众多catch代码块只执行一个
- catch捕获的异常类型,范围小的放上面
- finally可以不要
throw主动抛出异常
-
对于明显的不合法操作,可以通过throw主动抛出异常
-
一般在方法中使用
public void test(int a,int b) throws ArithmeticException{
if(b == 0){
//若b==0,主动抛出异常
throw new ArithmeticException();
}else{
System.out.println(a/b);
}
}
throws抛出异常
假如方法中解决不了这个异常,在方法上抛出异常
public void test(int a,int b) throws 异常类型{
//要写出什么时候会抛出异常
}
注意
如果在一个方法后面用 throws 声明了可能抛出的异常类型,在调用该方法时必须必须用 try 包含方法,且在 catch 一一声明对应的异常
public class main {
//方法test声明可能抛出的两种异常
public void test(int a) throws Exception1,Exception2 {
//若a>50时抛出一个异常
if(a>50)
throw new Exception1(a);
if(...)
}
try {
//使用该方法时要用try
new main().test(60);
System.out.println("1554");
//分别捕获对应的异常
} catch (Exception1 e) {
e.say();
}catch (Exception2 d){
}
以上方式让调用代码的人通过try—catch的方式对异常进行捕获
另一种方式
也可以在方法内部捕获异常
//定义一个除法运算的方法
public double divide(double a,double b) {
//若除数为令,抛出异常
if(b==0){
try{
throw new Exception1(b);
//在方法里面捕获异常
}catch (Exception1 e){
e.toString();
}
}
return a/b;
}
在此时在调用方法时则不需要调用者捕获异常
public static void main(String[] args) {
main m = new main();
//此时不需要用try—catch捕获异常
System.out.println(m.divide(1,0));
}
}