Java throw Exception怎么用?

文章导读
上一个 测验 下一个 Java throws 和 throw 如果一个方法不处理 checked exception,则该方法必须使用 throws 关键字声明它。throws 关键字出现在方法签名末尾。
📋 目录
  1. Java throws 和 throw
  2. 语法
  3. Java Throws 和 Throw 示例
  4. 更多示例
A A

Java - Throws 和 Throw | 抛出异常



上一个
测验
下一个

Java throws 和 throw

如果一个方法不处理 checked exception,则该方法必须使用 throws 关键字声明它。throws 关键字出现在方法签名末尾。

你可以使用 throw 关键字抛出异常,可以是新实例化的异常,也可以是你刚刚捕获的异常。

试着理解 throws 和 throw 关键字之间的区别,throws 用于推迟处理 checked exception,而 throw 用于显式抛出异常。

语法

以下是使用 throwsthrow 抛出异常的语法 -

method(parameters) throws exception {
  // 方法实现
  throw new exception();
}

以下方法声明它抛出 RemoteException −

考虑下面的示例代码来使用 throwsthrow 关键字 -

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:在无效参数时抛出异常

以下示例展示了在传入无效参数时使用 throwthrows 关键字发送异常并处理异常。我们调用了一个 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

以下示例展示了在传入无效参数时使用 throwthrows 关键字发送异常,且异常未被处理。我们调用了一个 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)