try...catch...finally语句的应用语法:
try {
//业务实现代码(可能发生异常)
...
}
catch(异常类1 异常对象) {
//异常类1的处理代码
}
catch(异常类2 异常对象) {
//异常类2的处理代码
}
...//可以有多个catch语句
catch(异常类n 异常对象) {
//异常类n的处理代码
}
finally{
//资源回收语句
}
1、执行try语句中的业务代码出现异常时,系统会自动生成一个异常对象,该异常对象被提交给Java运行环境,此过程称为“抛出异常”;
2、当Java运行时环境收到异常对象时,会寻找能处理该异常对象的catch语句,即跟catch语句中的异常类型进行一一匹配,如果匹配成功,则执行相应的catch块进行处理,这个过程称为“捕获异常”;
3、try语句后可以有一条或多条catch语句,这是针对不同的异常类提供不同的异常处理方式。
4、try块是必需的,catch块和finally块是可选的,但catch块和finally块二者至少出现其一,也可以同时出现,即有两种形式的用法:try...finally和try...catch...finally;
5、try...catch...finally语句中的顺序不能颠倒,所有的catch块必须位于try块之后,finally块必须位于所有的catch块之后。
try...catch语句练习代码如下:
import java.util.Scanner;
public class Throwable {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
int array[]=new int[3];
try {
System.out.println("请输入第1个数:");
String str=scanner.next();
int n1=Integer.parseInt(str);
System.out.println("请输入第2个数:");
int n2=scanner.nextInt();
array[1]=n1/n2;
array[3]=n1*n2;
System.out.println("两个数的和是:"+(n1+n2));
} catch (NumberFormatException ex) {
// TODO: handle exception
System.out.println("数字格式化异常");
} catch (ArrayIndexOutOfBoundsException ex) {
// TODO: handle exception
System.out.println("下标越界异常");
} catch (ArithmeticException ex) {
// TODO: handle exception
System.out.println("算术异常");
}catch (Exception ex) {
// TODO: handle exception
System.out.println("其他未知异常");
}
System.out.println("程序结束");
}
}
当从键盘输入字符串时,将该字符串换成整数会产生NumberFormateException异常,因此对应的异常处理会输出“数字化格式异常”,运行结果如下所示:
当从键盘输入的第二个数是0时,会产生ArithmeticException算术异常,运行结果如下所示:
当输入的两个数都正确时,会执行“array[3]=n1*n2”语句,因数组a的长度为3,其下标取值为0~2,所以使用array[3]会产生数组下标越界异常,运行结果如下所示:
上述代码中,try语句后有四条catch语句,分别针对NumberFormatException、ArrayIndexOutOfBoundsException、ArithmeticException、和Exception这四种异常进行处理,其中Exception是其他3种异常的父类,其他3种异常的顺序可以颠倒,而Exception异常不能和前面的异常进行调换,Exception能够处理所有异常,该异常只能放在最后使用,否则Java虚拟机将会报错,无法正常运行代码段。