如果方法不处理检查异常,则该方法必须使用 throws 关键字声明它。 throws 关键字出现在方法签名的末尾。
您可以使用 throw 关键字抛出异常,可以是新实例化的异常,也可以是刚刚捕获的异常。
尝试理解 throws 和 throw 关键字之间的区别,throws 用于推迟检查异常的处理,而 throw 用于调用显式异常。
以下方法声明它抛出 RemoteException 异常
示例
import java.io.*;
public class className {
public void deposit(double amount) throws RemoteException {
// 方法实现
throw new RemoteException();
}
// 类定义的其余部分
}
一个方法可以声明它抛出多个异常,在这种情况下,异常以逗号分隔的方式在列表中声明。例如,以下方法声明它抛出 RemoteException 和 InsufficientFundsException 两个异常
示例
import java.io.*;
public class className {
public void withdraw(double amount) throws RemoteException,
InsufficientFundsException {
//方法实现
}
// 类定义的其余部分
}
示例 1
以下示例显示了如果传递了无效参数,如何使用 throw 关键字发送异常。我们调用一个divide方法来检查第二个参数是否为零,然后它将抛出一个带有自定义消息的IllegalArgumentException 异常。由于 IllegalArgumentException 是未经检查的异常,因此divide 方法不需要声明 throws 语句。现在,由于父方法没有处理异常,JVM 会拦截该异常并打印错误消息并终止程序。
package com.yxjc123;
public class ExcepTest {
public static void main(String args[]) {
int a = 3;
int b = 0;
System.out.println("result:" + divide(a,b));
}
private static int divide(int a, int b) {
if(b == 0) {
throw new IllegalArgumentException("second argument cannot be zero.");
}
return a / b;
}
}
输出
Exception in thread "main" java.lang.IllegalArgumentException: second argument cannot be zero.
at com.yxjc123.ExcepTest.divide(ExcepTest.java:13)
at com.yxjc123.ExcepTest.main(ExcepTest.java:8)
示例 2
以下示例展示了如何使用 throw 和 throws 关键字在传递无效参数的情况下发送异常并处理异常。我们调用一个 div 方法,该方法检查第二个参数是否为零,然后它将抛出带有自定义消息的异常。由于Exception是受检查异常,因此divide方法需要声明throws语句。现在,由于父方法要处理异常或声明抛出异常,因此我们正在处理异常并打印消息。
package com.yxjc123;
public class ExcepTest {
public static void main(String args[]) {
int a = 3;
int b = 0;
try {
System.out.println("result:" + divide(a,b));
} catch (Exception e) {
System.out.println("Exception: " + e);
}
}
private static int divide(int a, int b) throws Exception {
if(b == 0) {
throw new Exception("second argument cannot be zero.");
}
return a / b;
}
}
输出
Exception: java.lang.Exception: second argument cannot be zero.
示例 3
以下示例展示了如何使用 throw 和 throws 关键字在传递无效参数且未处理异常的情况下发送异常。我们调用一个 div 方法,该方法检查第二个参数是否为零,然后它将抛出带有自定义消息的异常。由于Exception是受检查异常,因此divide方法需要声明throws语句。现在,由于父方法要么处理异常,要么声明抛出异常,因此我们声明抛出异常,JVM 将处理异常。
package com.yxjc123;
public class ExcepTest {
public static void main(String args[]) throws Exception {
int a = 3;
int b = 0;
System.out.println("result:" + divide(a,b));
}
private static int divide(int a, int b) throws Exception {
if(b == 0) {
throw new Exception("second argument cannot be zero.");
}
return a / b;
}
}
输出
Exception in thread "main" java.lang.Exception: second argument cannot be zero.
at com.yxjc123.ExcepTest.divide(ExcepTest.java:15)
at com.yxjc123.ExcepTest.main(ExcepTest.java:9)