Java异常处理
异常产生后,如果不做任何处理,程序就会被终止,为了保证程序有效的执行,就需要对发生的异常进行相应处理。在Java中,若某个方法抛出异常,既可以在当前方法中进行捕获然后处理该异常,也可以将异常向上抛出,由方法的调用者来处理。下面就来讲解Java中对异常的处理。
1.使用try-catch语句
在Java中,对容易发生异常的代码,可以通过try-catch语句进行捕获。在try语句块中编写可能发生异常的代码,然后在catch语句块中捕获执行这些代码时可能发生的异常。使用格式如下:
try{
可能产生异常的代码
}catch(异常类 异常对象){
异常处理代码
}
try语句块中的代码可能同时存在多种异常,那么到底捕获的是哪一种类型的异常,是由catch语句中的“异常类”参数来指定。catch语句类似于方法的声明,包括一个异常类型和该类的一个对象,异常类必须是Throwable类的子类,用来指定了catch语句要捕获的异常,异常类对象可以在catch语句块中被调用,如调用对象的getMessage()方法获取对异常的描述信息。
例如,将一个字符串转换为整型,可以通过Integer类的parseInt()方法来实现。当该字符串不是数字形式时,parseInt()方法会抛出异常。Integer类的parseInt()方法的声明如下:
public static int parseInt(String s) throws NumberFormatException{…}
代码中通过throws语句抛出了NumberFormatException异常,所以在应用parseInt()方法时可以通过try-catch语句来捕获该异常,从而进行相应的异常处理。
try{
int age=Integer.parseInt("24L"); //抛出NumberFormatException异常
System.out.println("打印1");
}catch(NumberFormatException e){ //捕获NumberFormatException异常
System.out.println("年龄请输入整数!");
System.out.println("错误:"+e.getMessage());
}
System.out.println("打印2");
因为程序执行到“Integer.parseInt(“24L”)”语句时抛出异常,直接被catch语句捕获,程序流程跳转到catch语句块内继续执行,所以“System.out.println("打印1")”代码行不会被执行;而异常处理结束后,会继续执行try-catch语句后面的代码。运行结果如下:
年龄请输入整数!
错误:For input string: "24L"
打印2
如果在执行catch语句块中的代码时出现了其他原因,则该try-catch语句不会被顺利执行,那么程序会终止,将不再执行try-catch语句后面的代码。例如:
try{
int age=Integer.parseInt("24L"); //抛出NumberFormatException异常
System.out.println("打印1");
}catch(NumberFormatException e){ //捕获NumberFormatException异常
int b=8/0; //编译出错,抛出ArithmeticException异常
System.out.println("年龄请输入整数!");
System.out.println("错误:"+e.getMessage());
}
System.out.println("打印2");
上述代码在执行try语句块代码时抛出异常,由catch语句捕获,然后来执行catch语句块中的代码,当执行“int b=8/0”语句时,又抛出了ArithmeticException异常,此时程序被终止,不再执行“System.out.println("打印2")”语句。运行结果如下:
Exception in thread "main" java.lang.ArithmeticException: / by zero
说明:
如果在不知道代码抛出的是哪种异常的情况下,可以指定它们的父类Throwable或Exception。
在try-catch语句中,可以同时存在多个catch语句块,使用格式如下:
try{
可能产生异常的代码
}catch(异常类1 异常对象){
异常1处理代码
}catch(异常类2 异常对象){
异常2处理代码
}
…//其他catch语句块
代码中的每个catch语句块用来捕获一种类型的异常。若try语句块中的代码发生异常,则会由上而下依次来查找能够捕获该异常的catch语句块,并执行该catch语句块中的代码。

RSS订阅





