为了保证程序有效地执行,需要对发生的异常进行相应的处理。在Java中,如果某个方法抛出异常,既可以在当前方法中进行捕捉,然后处理该异常,也可以将异常向上抛出,由调用者来处理。
一、错误
异常产生后,如果不做任何处理,程序就会被终止,示例如下:
public class Thundering {
public static void main(String args[]) {
String str = "lili";
System.out.println(str+"年龄是:");
int age = Integer.parseInt("20L");
System.out.println(age);
}
}
/*输出结果如下:
java.lang.NumberFormatException: For input string: "20L"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)
at java.base/java.lang.Integer.parseInt(Integer.java:658)
at java.base/java.lang.Integer.parseInt(Integer.java:776)
at ThePart12/test.Thundering.main(Thundering.java:7)
*/
从上述例子可以看出,报出了NumberFormatException异常,提示信息“lili年龄是:”已经输出,而变量age没有输出,所以是在 执行类型转换代码时出差了。
二、捕捉异常
Java语言的异常捕获结构由try、catch和finally三部分构成。其中try语句块存放的是可能发生异常的Java语句;catch程序块在try语句块之后,用来激发捕获异常;finally语句块是异常处理结构的最后执行部分,无论try语句块如何退出,都将执行finally块,语法如下:
try{
//程序代码块
}
catch(Exceptiontype1 e){
//对Exceptiontype1的处理
}
catch(Exceptiontype2 e){
//对Exceptiontype2的处理
}
...
finally{
//程序块
}
1、try-catch语句块
示例如下:
public class Take {
public static void main(String args[]) {
try {
String str = "lili";
System.out.println(str+"年龄是:");
int age = Integer.parseInt("20L");
System.out.println(age);
}catch (Exception e) {
e.printStackTrace();//输出异常性质
}
System.out.println("program over");//输出信息
}
}
/*输出结果如下:
lili年龄是:
java.lang.NumberFormatException: For input string: "20L"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)
at java.base/java.lang.Integer.parseInt(Integer.java:658)
at java.base/java.lang.Integer.parseInt(Integer.java:776)
at ThePart12/test.Take.main(Take.java:8)
program over
*/
从输出结果可以看出,程序仍然输出最后的提示信息,没有因为异常而终止,说明当try语句块中的代码出现错误时,就会跳转到catch代码块中的执行,执行完后继续执行catch语句块后的代码。
通常,异常处理常用以下3个函数来获取异常相关的信息:
(1)getMessage()函数:输出错误性质
(2)toString()函数:给出异常的性质和类型
(3)printStackTrace()函数:输出异常的类型、性质、战层次及出现在程序中的位置
2、finally语句块
完整的异常处理语句一定要包含finally语句,无论程序中有无异常发生,并且无论直接的try-catch是否顺利执行完毕,都会执行finally语句。
在以下几种特殊情况下,finally语句不会执行:
(1)在finally语句块中发生异常
(2)在前面的代码中使用了System.exit()退出程序
(3)程序所在的线程死亡
(4)关闭CPU