Java 处理除以零和多个异常

Java 处理除以零和多个异常

异常 是不寻常的事件,会中断程序的正常执行流程。当发生异常时,会生成一个名为异常对象的对象,其中包含异常的详细信息,如名称、描述和程序状态。在本节中,我们将编写一个Java程序来处理除以零异常以及如何处理多个异常。

异常的类型:

有三种类型的异常:

  • 已检查的异常 - 已检查的异常是编译时异常,即它们在程序编译期间被检查。这些异常不能被忽略,必须由程序员处理。

    示例 - IOException、SQLException、ClassNotFounException。

  • 未检查的异常 - 未检查的异常是运行时异常,即它们在编译时被忽略,在程序执行期间被检查。

    示例 - NullPointerException、ArthemeticException和ArrayIndexOutOfBoundException。

  • 错误 - 错误是无法恢复的异常,通常是由于Java虚拟机或系统资源的问题引起的。错误与异常不同,错误不应该被程序员捕捉或处理,因为它们告诉我们存在严重问题,无法由程序修复。

    示例 - OutOfMemoryError、StackOverflowError。

Java中不同类型异常的示例

  • ArithmeticException - 当算术运算产生溢出或下溢或除以零时抛出。

  • NullPointerException - 当我们引用一个空对象时抛出。

  • ArrayIndexOutOfBoundsException - 当我们尝试访问超出边界的索引时抛出。

  • IOException - 当输入/输出操作失败时抛出。

  • FileNotFoundException - 当尝试访问不存在的文件时抛出。

异常处理

异常处理 是处理程序执行期间抛出异常的过程,以保持执行流程的连续。在Java中,可以使用 try-catch 块来实现。try块中包含可能引发异常的代码,而catch块中包含处理异常的代码。

我们可以使用内置异常或创建自定义异常。自定义异常继承自Exception类或 RuntimeException 类。

语法

try-catch块 - try-catch块用于处理异常。try块包含可能引发异常的代码。catch块捕获异常并处理异常。

try {
   // Protected code
} catch (ExceptionName e1) {
   // Catch block
}

getMessage() − 这个方法用于以字符串的形式获取异常的详细描述。

exceptionObject.getMessage()

throw − throw是Java中用于显式抛出异常的关键字。

super() − super()方法用于调用父类的方法。

现在我们将讨论在Java中通过实现Java代码来处理除以零异常的不同方法。

方法1:使用try-catch块

在这种方法中,我们使用Java中的try-catch块来处理除以零异常。这种方法的步骤如下所示−

  • 我们为分子和分母初始化两个数值。我们将分母初始化为零。

  • 在try块中,我们将除法语句写入,因为它可能会抛出异常,并且在catch块中我们使用算术异常来处理异常。

现在,让我们看一个在Java中实现代码的示例。

示例

在这个示例中,我们初始化两个变量’numerator’和’denominator’,我们确保将分母初始化为零,然后进行除法运算,由于我们不能使用零进行除法运算,所以抛出了一个异常,并且使用catch块捕获了异常

//Java program to handle divide by zero exception
import java.util.*;
public class Main{
   public static void main(String[] args) {

      int numerator  = 7;
      int denominator = 0;
      try {
         int answer = numerator / denominator;
         System.out.println("Result: " + answer);
      } catch (ArithmeticException ex) {
         System.out.println("Error: " + ex.getMessage());
         System.out.println("Cannot divide a value by zero.");
      }
   }
}

输出

Error: / by zero
Cannot divide a value by zero.

方法2:使用自定义异常类

在这种方法中,我们将实现一个自定义类或程序员创建的类来处理Java中的除零异常。我们在这种方法中遵循的步骤如下:

  • 我们为分子和分母初始化两个数值。分母的值初始化为零。

  • 我们为除零异常创建一个自定义类,该类继承自异常类。

  • 在try块中,我们明确抛出异常,并使用catch块调用自定义类来处理异常。

示例

在此示例中,我们创建了一个名为’DivideByZeroException’的自定义类,并继承了’Exception’。该类处理由于除以零而引起的异常。当在主方法中引发异常时,我们使用’throw’关键字调用自定义类,通过使用’new’关键字来创建该类的对象。

import java.util.*;
class DivideByZeroException extends Exception {
   public DivideByZeroException(String message) {
      super(message);
   }
}
public class Main {
   public static void main(String[] args) {
      int numerator = 5;
      int denominator = 0;
      try {
         if (denominator == 0) {
            throw new DivideByZeroException("Error: Cannot divide a number by zero.");
         }
         int answer  = numerator / denominator;
         System.out.println("Result: " + answer);
      } catch (DivideByZeroException ex) {
         System.out.println(ex.getMessage());
      }
   }
}

输出结果

Error: Cannot divide a number by zero.

处理多个异常

处理多个异常就是在一个try块中有多个catch块,用于处理try块中发生的多个异常。我们将使用不同的catch块来处理不同种类的异常。

在这种方法中,我们将处理在一个try块中发生的多个异常,并使用多个catch块来处理它们。

步骤

  • 声明一个try块,并初始化两个整数变量,分别为numerator和denominator。denominator变量初始化为0。

  • 如果denominator值等于零,则抛出一个ArithmeticException。

  • 编写多个catch块来处理不同的异常。

  • 使用Java中的不同内置方法,并打印异常消息和发生的异常。

示例

在这个示例中,我们使用一个单独的try块,后面跟着多个catch块。如果try块中抛出一个ArithmeticException,那么将执行处理ArithmeticException代码的catch块。如果try块抛出一个NullPointerException,那么将执行相应的catch块。如果catch块不处理try块抛出的特定异常,则将执行最后一个catch块的代码,因为它处理通用的异常情况。从示例中看到,由于denominator值初始化为零,我们使用’throw’关键字抛出一个ArithmeticException,并且执行相应的catch块来处理ArithmeticException。

import java.util.*;
public class Main {
   public static void main(String[] args) {
      try {
         int numerator = 10, denominator = 0 ;
         if(denominator == 0) {
            throw new ArithmeticException();
         }
      } catch (ArithmeticException e) {
         System.out.println("ArithmeticException caught.");
         System.out.println("Message: " + e.getMessage());
         System.out.println("Stack Trace: ");
         e.printStackTrace();
         System.out.println("Cause: " + e.getCause());
      } catch (NullPointerException e) {
         System.out.println("NullPointerException caught.");
         System.out.println("Message: " + e.getMessage());
         System.out.println("Stack Trace: ");
         e.printStackTrace();
         System.out.println("Cause: " + e.getCause());
      } catch (ArrayIndexOutOfBoundsException e) {
         System.out.println("ArrayIndexOutOfBoundsException caught.");
         System.out.println("Message: " + e.getMessage());
         System.out.println("Stack Trace: ");
         e.printStackTrace();
         System.out.println("Cause: " + e.getCause());
      } catch (Exception e) {
         System.out.println("NullPointerException caught.");
         System.out.println("Message: " + e.getMessage());
         System.out.println("Stack Trace: ");
         e.printStackTrace();
         System.out.println("Cause: " + e.getCause());
      }
   }
}

输出

ArithmeticException caught.
Message: null
Stack Trace: 
Cause: null
java.lang.ArithmeticException
    at Main.main(Main.java:7)

因此,在本文中我们讨论了如何处理由除以零引起的异常,以及如何使用不同的方法在Java中处理多个异常。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程