Java 异常之手动抛出与自动抛出的实例讲解
在 Java 语言中,异常是一个重要的特性,用于处理运行时的错误或异常情况。Java 异常是一个对象,表示在程序执行期间发生的异常情况。在 Java 中,异常通常分为检查异常和非检查异常两种。
异常类型
- 检查异常:是指在编写程序时必须进行捕获或者在方法中进行抛出声明的异常,例如
IOException
、InterruptedException
、ClassNotFoundException
。 - 非检查异常:也称为运行时异常,通常表示程序运行时的错误或异常情况,例如
NullPointerException
、ArrayIndexOutOfBoundsException
、ArithmeticException
。
异常的自动抛出
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
方法,该方法接受两个整数参数 dividend
和 divisor
,计算 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技术站