一、概念
异常处理是一种机制,用于捕获和处理程序运行时的异常情况。异常处理可以帮助我们优雅地处理错误,并在出现异常时提供适当的响应。
异常处理的方式分为以下几种:
(1)try - catch - finally语句块
(2) throws关键字
(3)自定义异常
(4)try-with-resources语句
以上异常处理方式,我们可以在Java中捕获和处理异常,确保程序的稳定性和可靠性。根据具体需求和异常类型选择适当的异常处理方式。
二、异常处理方式
2.1、try - catch - finally语句块
在try块中编写可能引发异常的代码。如果try块中的代码引发了与catch语句中声明的异常类型匹配的异常,程序将跳转到相应的catch块中进行异常处理。可以使用多个catch块来处理不同类型的异常。finally块是可选的,并且无论是否发生异常,都会在try-catch块执行完毕后执行。
例如:(注意看运行结果,明白该语句块的实现过程)
public class Test8 {
public static void main(String[] args) {
System.out.println(show());
}
public static int show() {
try {
System.out.println("Yes");
return 1;
}catch (Exception e) {
System.out.println("No");
return 2;
}finally {
System.out.println("Why");
return 3;
}
}
}
输出结果:
Yes
Why
3
语法如下:
try {
// 可能引发异常的代码
} catch (Exception e) {
// 捕获到该类型异常
//1.系统将异常封装成一个Exception对象e
//2.传递给catch
//3.得到异常对象后,可行在此处写处理代码。
//注:如果没有发生异常该段代码不执行
} catch (ExceptionType e2) {
// 处理异常类型2的代码与上述方式相同
} finally {
// 可选的finally代码块,在异常抛出或未抛出时都会执行
}
2.2、throws关键字
throws关键字用于在方法签名中声明可能抛出的异常类型,以便调用该方法的地方可以合适地处理或继续抛出这些异常。其中将发生的异常抛出,交给调用者(方法)来处理,最顶级的处理者就是JVM。
番外:关键字throw和throws的区别
throw : 用于人为手动触发异常,将异常对象抛出
throws : 用于方法声明,指定该方法可能抛出的异常类型,让调用者处理或继续抛出异常。
2.2.1、throw关键字
(1)用于在代码块中手动触发异常。
(2)throw后面通常跟着一个Exception对象,可以是Java内置的异常类(如: NullPointerException、IllegalArgumentException
等),也可以是自定义的异常类。
(3)当程序执行到throw
语句时,会立即抛出指定的异常对象,并中断当前代码块的执行。
(4)通常用于在特定条件下主动抛出异常,例如输入验证失败、业务逻辑错误等情况。
样例:
public class Test8 {
public static void main(String[] args) {
show(null);
}
public static void show(String input) {
if (input == null) {
throw new IllegalArgumentException("字符串不能为空");
}
System.out.println("你猜有字符串为空时会不会打印出这条信息");
}
}
2.2.2、throws关键字
(1)用于在方法声明中指定可能抛出的异常类型。
(2)throws
后面跟着一个或多个异常类型,用逗号分隔。
(3)如果一个方法可能会引发多个异常,可以在方法声明中使用throws
关键字列出这些异常类型。
(4)声明异常类型的目的是将异常的处理责任交给调用该方法的代码。
(5)调用该方法的代码必须进行相应的异常处理,或者再次使用throws
关键字将异常向上抛出。
public class Test8 {
public static void main(String[] args) {
try {
show();
} catch (NumberFormatException e) {
System.err.println("非数据类型不能强制类型转换。");
e.printStackTrace();
}
}
public static void show() throws NumberFormatException {
String s = "abc";
System.out.println(Double.parseDouble(s));
}
}