如果方法不处理检查异常,则该方法必须使用 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)