Java 简明教程
Java - Throws and Throw | Throw an Exception
Java throws and throw
你可以使用 throw 关键字抛出一个异常,它既可以是一个新实例化的异常,也可以是你刚捕获的异常。
尝试理解 throws 和 throw 关键字之间的差异,throws 用于推迟对已检查异常的处理,而 throw 用于显式地调用一个异常。
Syntax
以下是使用 throws 和 throw 抛出异常的语法:
method(parameters) throws exception {
// Method implementation
throw new exception();
}
以下方法声明它抛出一个 RemoteException −
考虑下面的示例代码以使用 throws 和 throw 关键字:
import java.io.*;
public class className {
public void deposit(double amount) throws RemoteException {
// Method implementation
throw new RemoteException();
}
// Remainder of class definition
}
一个方法可以声明它抛出多个异常,在这种情况下,异常被声明在一个以逗号分隔的列表中。例如,以下方法声明它抛出 RemoteException 和 InsufficientFundsException −
import java.io.*;
public class className {
public void withdraw(double amount) throws RemoteException,
InsufficientFundsException {
// Method implementation
}
// Remainder of class definition
}
Java Throws and Throw Example
以下示例显示了使用 throw 关键字在传递无效参数的情况下发送异常。我们正在调用一个 divide 方法,该方法检查第二个参数是否为零,然后会抛出一个带有自定义消息的 IllegalArgumentException。由于 IllegalArgumentException 是一个未经检查的异常,因此不需要 divide 方法来声明 throws 语句。现在,由于父方法没有处理异常,JVM 截获了该异常,并打印错误消息并终止程序。
package com.tutorialspoint;
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.tutorialspoint.ExcepTest.divide(ExcepTest.java:13)
at com.tutorialspoint.ExcepTest.main(ExcepTest.java:8)
More Examples
Example 1: Throw an exception on invalid arguments
以下示例展示了使用 throw 和 throws 关键字在传入无效参数时发送异常并处理异常。我们调用一个 divide 方法,它检查第二个参数是否是零,如果是,则会抛出一个带有自定义消息的异常。由于异常是一个 checked 异常,divide 方法需要声明 throws 语句。现在,由于父方法要处理异常或声明 throws 异常,我们处理异常并打印消息。
package com.tutorialspoint;
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.
Example 2: Using throws and throw in main and other method
以下示例展示了使用 throw 和 throws 关键字在传入无效参数时发送异常但不处理异常的用法。我们调用一个 divide 方法,它检查第二个参数是否是零,如果是,则会抛出一个带有自定义消息的异常。由于异常是一个 checked 异常,divide 方法需要声明 throws 语句。现在,由于父方法要处理异常或声明 throws 异常,我们声明抛出异常,然后 JVM 将处理异常。
package com.tutorialspoint;
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.tutorialspoint.ExcepTest.divide(ExcepTest.java:15)
at com.tutorialspoint.ExcepTest.main(ExcepTest.java:9)