Java异常处理
相关的关键字
try 和 catch
使用 try 和 catch 关键字可以捕获异常。try/catch 代码块放在异常可能发生的地方。try/catch代码块中的代码称为保护代码
catch 语句包含要捕获异常类型的声明。当保护代码块中发生一个异常时,try 后面的 catch 块就会被检查。如果发生的异常包含在 catch 块中,异常会被传递到该 catch 块,这和传递一个参数到方法是一样。
try { // 程序代码 }catch(ExceptionName e1) { //Catch 块 }
throws和throw
throw:写在程序代码中用于抛出异常。
throws:写在方法后面,用于告诉程序这个方法中可能会抛出这些异常
finally
finally 关键字用来创建在 try 代码块后面执行的代码块。无论是否发生异常,finally 代码块中的代码总会被执行。
注意事项
- catch 不能独立于 try 存在。
- 在 try/catch 后面添加 finally 块并非强制性要求的。
- try 代码后不能既没 catch 块也没 finally 块。
- try, catch, finally 块之间不能添加任何代码
自定义异常
下方代码定义了“除数不能为0”的异常
class ForseException extends Exception{ //定义一个检查型异常类,所以要继承Exception类
private int value;
ForseException(){ //定义无参的构造函数
super(); //调用父类的无参构造函数
};
ForseException(String str,int val){ //定义有参的构造函数
super(str); //调用父类的有参构造函数
this.value=val;
}
public int getValue(){ //访问函数,用于访问此类的部分属性
return value;
}
}
public class Demo {
public static void main(String[] args) {
try{ //用于保护函数
double i=1;
double j =0;
double k = div(i,j);
System.out.println(k);
}catch(ForseException e){ //异常的捕获
System.out.println(e.getMessage());
System.out.println(e.getValue());
}
}
public static double div(double i,double j)throws ForseException{ //告诉程序可能会抛出ForseException异常
if(j==0){
throw new ForseException("除数不能为0",-1); //抛出ForseException异常
}else{
return i/j;
}
}
}