「这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战」 异常处理的方式
1.程序块中捕获并处理异常 这种处理方式要采用try-catch-finally结构
2.将方法中产生的或可能产生的异常抛出,留给调用该方法的程序块处理 使用throws关键字在方法头声明
try-catch-finally 结构
try-catch-finally 结构捕获程序中产生的异常,
然后针对不同的异常采用不同的
处理程序进行处理
try-catch-finally的匹配原则
(1)一个catch(ExceptionType1 e1)块能够捕获所有ExceptionType1类型的异常,它的子类型也都可以被这个catch捕获
(2)catch块的安排要遵循先具体后抽象的原则:父异常类应该放在子异常类的后面,否则编译器会报错
(3)如果两个异常类之间没有继承关系,则它们之间的先后关系可以是任意的
public class TestMultiCatch{
public static double calculateArea(double a, double b, double c){
double p = (a+b+c)/2;
return Math.sqrt(p*(p-a)*(p-b)*(p-c));
}
public static void main(String[] args){
try{
double a = Double.parseDouble(args[0]);
double b = Double.parseDouble(args[1]);
double c = Double.parseDouble(args[2]);
double s = calculateArea(a, b, c);
System.out.println("三角形面积是"+s);
}catch(ArrayIndexOutOfBoundsException e1){
System.out.println("数组访问越界,请至少输
入3个参数");
} catch(Exception e){
System.out.println("捕获到了Exception异常");
}
}
}
使用throws声明异常
使用throws声明抛出异常的思路是,当前方法不知道如何处理这种类型的异常,该异常应该由上一级调用者处理;如果main方法也不知道如何处理这种类型的异常,也可以使用throws声明抛出异常,该异常将交给JVM处理。
JVM对异常的处理方法是:打印异常的跟踪栈信息,并终止程序运行,这就是前面程序在遇到异常后自动结束的原因。
throws声明抛出异常只能在方法签名中使用。如果某段代码中调用了一个带throws声明的方法,该方法声明抛出了Checked异常,则表明该方法希望它的调用者来处理该异常。也就是说,调用该方法时要么放在try块中显式捕获该异常,要么放在另一个带throws声明抛出的方法中。