java 异常之手动抛出与自动抛出的实例讲解

Java 异常之手动抛出与自动抛出的实例讲解

在 Java 语言中,异常是一个重要的特性,用于处理运行时的错误或异常情况。Java 异常是一个对象,表示在程序执行期间发生的异常情况。在 Java 中,异常通常分为检查异常和非检查异常两种。

异常类型

  1. 检查异常:是指在编写程序时必须进行捕获或者在方法中进行抛出声明的异常,例如 IOExceptionInterruptedExceptionClassNotFoundException
  2. 非检查异常:也称为运行时异常,通常表示程序运行时的错误或异常情况,例如 NullPointerExceptionArrayIndexOutOfBoundsExceptionArithmeticException

异常的自动抛出

Java 异常的自动抛出指的是:在程序运行时,如果发生某些特定的错误或异常情况,Java 运行时系统会自动创建并抛出对应的异常对象。这些异常通常是非检查异常,由于 Java 运行时系统会自动抛出,因此,我们把它们叫做自动抛出的异常。

例如,在下面的代码中:

public class AutoThrowDemo {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        System.out.println(arr[3]);
    }
}

在第四行中,我们访问了数组 arr 的第四个元素,但是,该数组只有三个元素,因此在运行时会出现数组越界异常。这种异常是自动抛出的,在运行时系统自动生成异常对象并抛出。

异常的手动抛出

Java 异常的手动抛出指的是:在程序执行过程中,开发者可以通过代码显式地手动抛出异常对象。这些异常可以是检查异常或者非检查异常,我们把它们叫做手动抛出的异常。

例如,在下面的代码中:

public class ManualThrowDemo {
    public static void main(String[] args) {
        int age = -10;
        if (age < 0) {
            throw new IllegalArgumentException("Age cannot be negative");
        }
    }
}

在第四行中,我们通过 throw 语句手动抛出了一个 IllegalArgumentException 异常对象,表示年龄不能为负数。

示例说明

示例 1:手动抛出异常

在许多情况下,我们需要根据不同的情况显式地抛出异常,以便更好地处理异常情况。

例如,我们现在想要编写一个函数来计算两个正数的商,但是,如果除数为零,那么就不能进行计算。这时候,我们可以通过手动抛出异常的方式来处理这种情况,具体代码如下:

public class DivisionDemo {
    public static double divide(int dividend, int divisor) throws ArithmeticException {
        if (divisor == 0) {
            throw new ArithmeticException("Division by zero");
        }
        return ((double)dividend) / divisor;
    }

    public static void main(String[] args) {
        int a = 10, b = 5;
        System.out.println(divide(a, b));
        int c = 10, d = 0;
        try {
            System.out.println(divide(c, d));
        } catch (ArithmeticException e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}

在上面的代码中,我们定义了一个 divide 方法,该方法接受两个整数参数 dividenddivisor,计算 dividend/divisor 的商,如果 divisor 为零,则手动抛出 ArithmeticException 异常对象。在 main 函数中,我们首先调用了 divide(10, 5),由于 divisor 不为零,因此程序正常执行并输出 2.0;而后,我们调用了 divide(10, 0),这时由于 divisor 为零,程序会接收到 ArithmeticException 异常对象,并输出 Error: Division by zero

示例 2:自动抛出异常

在编写程序时,我们尽可能地避免发生自动抛出的异常情况,但是,某些情况下,我们可以利用自动抛出的异常来优化代码。

例如,我们现在想要编写一个函数来找到一个数组中的最大值,如果数组为空,那么就返回 Integer.MIN_VALUE。这时候,我们可以通过自动抛出异常的方式来处理这种情况,具体代码如下:

public class MaxValueDemo {
    public static int getMax(int[] arr) {
        if (arr == null || arr.length == 0) {
            throw new IllegalArgumentException("The array is empty.");
        }
        int max = Integer.MIN_VALUE;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] > max) {
                max = arr[i];
            }
        }
        return max;
    }

    public static void main(String[] args) {
        int[] arr = {1, 3, 5, 7, 9};
        System.out.println(getMax(arr));
        int[] emptyArr = {};
        try {
            System.out.println(getMax(emptyArr));
        } catch (IllegalArgumentException e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}

在上面的代码中,我们定义了一个 getMax 方法,该方法接受一个整数数组 arr,返回数组中的最大值。如果数组为空,那么就抛出一个 IllegalArgumentException 异常对象。在 main 函数中,我们首先调用了 getMax({1, 3, 5, 7, 9}),由于数组中有元素,因此程序正常执行并输出 9;而后,我们调用了 getMax({}),这时由于数组为空,程序会自动抛出 IllegalArgumentException 异常对象,并输出 Error: The array is empty.

小结

从本文中我们可以了解到异常的自动抛出和手动抛出的区别,以及如何使用异常来处理程序中的错误情况。在编写程序时,我们需要正确地捕获和处理不同类型的异常,以便让我们的程序更加健壮。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java 异常之手动抛出与自动抛出的实例讲解 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C语言实现字符串操作函数的实例

    标题:C语言实现字符串操作函数的实例 介绍 在C语言中,字符串是一种特殊的字符数组,很多字符串操作函数都是基于字符数组的操作实现的。本文将介绍如何自己实现几个常用的字符串操作函数。 实现步骤 1.自实现strcpy()函数 strcpy()函数是将一个字符串复制到另一个字符串中,常用的函数定义如下: char *strcpy(char *dest, cons…

    C 2023年5月23日
    00
  • 探究一下C语言生成随机数的奥秘

    下面是关于“探究一下C语言生成随机数的奥秘”的完整攻略。 1. 引言 生成随机数在程序设计和数据分析过程中都是非常重要的一步。C语言中提供了多种方法来生成随机数,其中最常见的是使用stdlib.h库函数中的rand()函数。本文将对rand()函数进行详细介绍,并探究其生成随机数的奥秘。 2. rand()函数的使用 rand()函数是stdlib.h库中的…

    C 2023年5月22日
    00
  • jQuery深拷贝Json对象简单示例

    当我们需要复制一个json对象时,直接使用=赋值是不行的,因为这会导致两个变量指向同一个内存地址,修改其中一个对象的值会同时修改另一个对象的值。这时候我们需要使用深拷贝来复制json对象,这样两个对象就指向不同的内存地址,不会相互影响。 以下是深拷贝Json对象的示例代码: // 定义json对象 var obj1 = {"name":&…

    C 2023年5月23日
    00
  • 电脑使用小技巧集合

    电脑使用小技巧集合攻略 简介 本文是一份电脑使用小技巧集合攻略。通过学习本攻略,你可以更好地使用电脑,更快捷地完成各项工作和任务。本攻略共包含以下内容: 快捷键的使用; 系统设置的优化; 常用软件的小技巧。 快捷键的使用 快捷键可以减少鼠标的使用,提高工作效率。以下是常用的一些快捷键: 快捷键 功能 Ctrl + C 复制 Ctrl + X 剪切 Ctrl …

    C 2023年5月22日
    00
  • 详解C++中的万能头文件

    好的。首先让我解释一下什么是万能头文件。 在C++中,头文件是开发者定义新类型、函数和变量的地方。当一个程序中需要使用某些函数或变量时,我们需要包含对应的头文件。万能头文件指的是一些包含了大量库函数和其他头文件信息的头文件,如: #include <iostream> #include <stdio.h> #include <s…

    C 2023年5月23日
    00
  • C++实现高校人员信息管理系统

    C++ 实现高校人员信息管理系统 高校人员信息管理系统是一款常用的管理软件,它可以帮助高校管理人员和教师更加方便和快捷地管理学生和教职工的基本信息。本攻略将对该系统的实现进行详细讲解。 1.需求分析 首先,我们需要明确系统需要管理的基本信息,包括学生、教师和职工的姓名、性别、出生日期、学号(教职工号)、家庭住址等信息。 其次,系统需要支持添加、删除、修改学生…

    C 2023年5月23日
    00
  • C 程序 按升序排列数字

    下面我将为你详细讲解如何使用 C 语言编写一个程序,实现对一组数字按升序排列的功能。在这个过程中,我将提供两条示例说明,帮助你更好地理解。 一、题目描述 编写一个 C 语言程序,实现对一组数值按升序排列的功能。程序输入一个整数数组,长度不超过 100,输出数组按升序排列后的结果。 二、实现思路 我们可以使用 C 语言中的冒泡排序算法来实现对一组数字的升序排列…

    C 2023年5月9日
    00
  • Python JSON模块的使用详情

    Python JSON模块的使用详情 什么是JSON? JSON是JavaScript对象表示法(JavaScript Object Notation)的缩写,是一种轻量级的数据交换格式。它以易于阅读和编写的文本格式为基础,通常用于在网络之间传输数据。在Python中,有一个常用的模块叫做json,可以方便地对JSON数据进行编码和解码操作。 序列化与反序列…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部