Java 教程

Java 控制语句

面向对象编程

Java 内置类

Java 文件处理

Java 错误和异常

Java 多线程

Java 同步

Java 网络

Java 集合

Java 接口

Java 数据结构

Java 集合算法

高级 Java

Java 杂项

Java API 和框架

Java 类参考

Java 有用资源

Java - throw 关键字



异常(或异常事件)是在程序执行期间出现的错误。当出现异常时,程序的正常流程被打断,程序/应用程序异常终止,这是不建议的,因此,这些异常需要处理。

异常可能由于许多不同的原因发生。以下是发生异常的一些场景。

  • 用户输入了无效数据。

  • 需要打开的文件找不到。

  • 网络连接在通信过程中断开,或者 JVM 内存不足。

其中一些异常是由用户错误引起的,另一些是由程序员错误引起的,还有一些是由以某种方式发生故障的物理资源引起的。

Throws/Throw 关键字

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

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

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

以下方法声明它抛出 RemoteException -

语法

public static void accesElement() throws CustomException {
   try {
      int a[] = new int[2];
      System.out.println("Access element three :" + a[3]);
   } catch(Exception e) {
      throw new CustomException(e);
   }
}

示例

在此示例中,我们调用了一个名为 accessElement() 的方法,该方法声明抛出 CustomException。因此,我们需要在 accessElement() 方法上编写一个 try-catch 块。当程序运行时,它会抛出异常并打印出来。

// File Name : ExcepTest.java
package com.tutorialspoint;

public class ExcepTest {

   public static void main(String args[])  {
      try {
         accesElement();
      } catch (CustomException e) {		
         e.printStackTrace();
      }
      System.out.println("Out of the block");
   }

   public static void accesElement() throws CustomException {
      try {
         int a[] = new int[2];
         System.out.println("Access element three :" + a[3]);
      } catch(Exception e) {
         throw new CustomException(e);
      }
   }
}

class CustomException extends Exception{
   private static final long serialVersionUID = 1L;
   CustomException(Exception e){
      super(e);
   }
}

输出

com.tutorialspoint.CustomException: java.lang.ArrayIndexOutOfBoundsException: 3
	at com.tutorialspoint.ExcepTest.accesElement(ExcepTest.java:20)
	at com.tutorialspoint.ExcepTest.main(ExcepTest.java:8)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 3
	at com.tutorialspoint.ExcepTest.accesElement(ExcepTest.java:18)
	... 1 more
Out of the block

以下是另一个展示 throws 关键字用法的示例。

示例

在此示例中,我们调用了一个名为 accessElement() 的方法,该方法声明抛出 CustomException。因此,我们没有在 accessElement() 方法上编写 try-catch 块,而是 main 方法声明抛出异常。当程序运行时,它会抛出异常并打印出来。

// File Name : ExcepTest.java
package com.tutorialspoint;

public class ExcepTest {

   public static void main(String args[]) throws CustomException  {
      accesElement();
      System.out.println("Out of the block");
   }

   public static void accesElement() throws CustomException {
      try {
         int a[] = new int[2];
         System.out.println("Access element three :" + a[3]);
      } catch(Exception e) {
         throw new CustomException(e);
      }
   }
}

class CustomException extends Exception{
   private static final long serialVersionUID = 1L;
   CustomException(Exception e){
      super(e);
   }
}

输出

Exception in thread "main" com.tutorialspoint.CustomException: java.lang.ArrayIndexOutOfBoundsException: 3
	at com.tutorialspoint.ExcepTest.accesElement(ExcepTest.java:16)
	at com.tutorialspoint.ExcepTest.main(ExcepTest.java:7)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 3
	at com.tutorialspoint.ExcepTest.accesElement(ExcepTest.java:14)
	... 1 more

由于异常未被处理,因此在此示例中最后一个语句未执行。

一个方法可以声明它抛出多个异常,在这种情况下,这些异常以逗号分隔的列表的形式声明。例如,以下方法声明它抛出 RemoteException 和 InsufficientFundsException -

示例

import java.io.*;
public class className {

   public void withdraw(double amount) throws RemoteException, 
      InsufficientFundsException {
      // Method implementation
   }
   // Remainder of class definition
}
java_basic_syntax.htm
广告