Java 教程

Java 控制语句

面向对象编程

Java 内置类

Java 文件处理

Java 错误和异常

Java 多线程

Java 同步

Java 网络

Java 集合

Java 接口

Java 数据结构

Java 集合算法

高级 Java

Java 杂项

Java API 和框架

Java 类参考

Java 有用资源

Java - throws 和 throw | 抛出异常



Java throws 和 throw

如果一个 方法 没有处理已检查的 异常,则该方法必须使用throws关键字声明它。throws 关键字出现在方法签名末尾。

您可以抛出一个异常,无论是新实例化的异常还是刚刚捕获的异常,方法是使用throw关键字。

尝试理解 throws 和 throw 关键字之间的区别,throws 用于推迟已检查异常的处理,而throw 用于显式调用异常。

语法

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

method(parameters) throws exception {
  // Method implementation
  throw new exception();
}

以下方法声明它抛出一个 RemoteException -

考虑以下示例代码以使用throwsthrow 关键字 -

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 和 throw 示例

以下示例显示了 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)

更多示例

示例 1:在无效参数上抛出异常

以下示例显示了 throw 和 throws 关键字的使用,以在传递无效参数时发送异常并处理异常。我们正在调用一个 divide 方法,该方法检查第二个参数是否为零,如果是则会抛出一个带有自定义消息的 Exception。由于 Exception 是一个已检查的异常,因此 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.

示例 2:在 main 方法和其他方法中使用 throws 和 throw

以下示例显示了 throw 和 throws 关键字的使用,以在传递无效参数时发送异常并且异常未被处理。我们正在调用一个 divide 方法,该方法检查第二个参数是否为零,如果是则会抛出一个带有自定义消息的 Exception。由于 Exception 是一个已检查的异常,因此 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)
广告