Java - Throws 和 Throw | 抛出异常
Java throws 和 throw
如果一个方法不处理 checked exception,则该方法必须使用 throws 关键字声明它。throws 关键字出现在方法签名末尾。
你可以使用 throw 关键字抛出异常,可以是新实例化的异常,也可以是你刚刚捕获的异常。
试着理解 throws 和 throw 关键字之间的区别,throws 用于推迟处理 checked exception,而 throw 用于显式抛出异常。
语法
以下是使用 throws 和 throw 抛出异常的语法 -
method(parameters) throws exception {
// 方法实现
throw new exception();
}
以下方法声明它抛出 RemoteException −
考虑下面的示例代码来使用 throws 和 throw 关键字 -
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 {
// 方法实现
}
// 类的其余定义
}
Java Throws 和 Throw 示例
以下示例展示了在传递无效参数时使用 throw 关键字发送异常。我们调用一个 divide 方法,该方法检查第二个参数是否为零,如果是,则抛出带有自定义消息的 IllegalArgumentException。由于 IllegalArgumentException 是一个 unchecked exception,divide 方法不需要声明 throws 语句。现在,由于父方法没有处理该异常,JVM 会拦截它并打印错误消息,然后终止程序。
package com.;
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("第二个参数不能为零。");
}
return a / b;
}
}
输出
Exception in thread "main" java.lang.IllegalArgumentException: 第二个参数不能为零。 at com..ExcepTest.divide(ExcepTest.java:13) at com..ExcepTest.main(ExcepTest.java:8)
更多示例
示例 1:在无效参数时抛出异常
以下示例展示了在传入无效参数时使用 throw 和 throws 关键字发送异常并处理异常。我们调用了一个 divide 方法,该方法检查第二个参数是否为零,如果是,则抛出带有自定义消息的 Exception。由于 Exception 是一个 checked exception,divide 方法必须声明 throws 语句。作为父方法,必须要么处理异常,要么声明 throws 异常,因此我们处理了异常并打印消息。
package com.;
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.
示例 2:在 main 和其他方法中使用 throws 和 throw
以下示例展示了在传入无效参数时使用 throw 和 throws 关键字发送异常,且异常未被处理。我们调用了一个 divide 方法,该方法检查第二个参数是否为零,如果是,则抛出带有自定义消息的 Exception。由于 Exception 是一个 checked exception,divide 方法必须声明 throws 语句。作为父方法,必须要么处理异常,要么声明 throws 异常,因此我们声明抛出异常,由 JVM 处理异常。
package com.;
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..ExcepTest.divide(ExcepTest.java:15) at com..ExcepTest.main(ExcepTest.java:9)