Java RuntimeException 子类
最后修改于 2025 年 4 月 2 日
RuntimeException 是 Exception 的一个子类,它代表在 Java 虚拟机正常运行时可能发生的异常。与检查型异常不同,RuntimeException 不需要声明在方法签名中。
RuntimeException 通常指示编程错误,例如逻辑错误或 API 的不当使用。 它们是非检查型异常,这意味着编译器不会强制处理或声明它们。 常见的例子包括 NullPointerException 和 ArrayIndexOutOfBoundsException。
在本教程中,我们将通过实际示例探索各种 RuntimeException,了解它们的原因,并学习如何有效地处理它们。
NullPointerException
NullPointerException 发生在尝试访问或修改具有空值的对象引用时。 这是 Java 中最常见的 RuntimeException 之一。
void main() { String text = null; try { System.out.println(text.length()); } catch (NullPointerException e) { System.out.println("Caught NullPointerException: " + e.getMessage()); } }
在这个例子中,我们尝试调用一个空字符串引用上的 length() 方法。 这会抛出一个 NullPointerException,我们捕获并处理它。 在访问对象成员之前,务必检查是否为空以防止此异常。
ArrayIndexOutOfBoundsException
ArrayIndexOutOfBoundsException 是在尝试使用非法索引(负数或超出数组大小)访问数组元素时抛出的异常。
void main() { int[] numbers = {1, 2, 3}; try { System.out.println(numbers[3]); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("Invalid array index: " + e.getMessage()); } }
在这里,我们尝试访问一个只有 3 个元素的数组(索引 0-2)的索引 3。 该异常被捕获并处理。 在访问之前,务必验证数组索引。
ClassCastException
ClassCastException 发生在尝试将一个对象强制转换为它不是实例的子类时。 这是使用继承时的一个常见问题。
void main() { Object obj = "Hello"; try { Integer num = (Integer) obj; } catch (ClassCastException e) { System.out.println("Failed to cast: " + e.getMessage()); } }
我们尝试将一个 String 强制转换为一个 Integer,这会抛出 ClassCastException。 在强制转换之前使用 instanceof 检查类型,以防止此运行时异常。
IllegalArgumentException
IllegalArgumentException 是指当方法接收到的参数对于其目的无效或不合适时抛出的异常。 它通常用于验证参数。
void main() { try { setAge(-5); } catch (IllegalArgumentException e) { System.out.println("Invalid age: " + e.getMessage()); } } void setAge(int age) { if (age < 0) { throw new IllegalArgumentException("Age cannot be negative"); } // Set age logic }
setAge 方法会针对负年龄抛出 IllegalArgumentException。 这是公共方法中进行参数验证的一个良好实践。
NumberFormatException
NumberFormatException 发生在尝试将字符串转换为数字类型,但字符串不具有适当的格式时。
void main() { try { int num = Integer.parseInt("123abc"); } catch (NumberFormatException e) { System.out.println("Invalid number format: " + e.getMessage()); } }
我们尝试将一个非数字字符串解析为整数,导致 NumberFormatException。 在进行数字转换尝试之前,务必验证字符串格式。
UnsupportedOperationException
UnsupportedOperationException 表示所请求的操作不受支持。 它通常用于不可变集合或未实现的方法中。
void main() { List<String> immutableList = List.of("a", "b", "c"); try { immutableList.add("d"); } catch (UnsupportedOperationException e) { System.out.println("Operation not supported: " + e.getMessage()); } }
List.of
创建一个不可变的列表。 尝试添加元素会抛出 UnsupportedOperationException
。 在修改之前检查集合的可变性。
ArithmeticException
ArithmeticException 是指当发生特殊的算术条件时抛出的异常,例如除以零或整数溢出。
void main() { try { int result = 10 / 0; } catch (ArithmeticException e) { System.out.println("Arithmetic error: " + e.getMessage()); } }
除以零会抛出 ArithmeticException。 在进行除法运算之前,务必验证分母以防止此运行时错误。
来源
在本文中,我们探讨了 Java 中的各种 RuntimeException、它们的原因以及如何处理它们。 了解这些异常有助于编写更健壮的代码。
作者
列出所有Java教程。