MST
星途 面试题库

面试题:Java中异常处理机制及常见异常类型

请详细阐述Java的异常处理机制,包括try - catch - finally语句的执行流程。同时,列举至少5种常见的运行时异常(RuntimeException)并说明它们通常在什么情况下会被抛出。
27.9万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

Java异常处理机制

  1. 异常概念:Java中,异常是在程序执行过程中发生的错误或意外情况。异常处理机制允许程序捕获并处理这些异常,使程序不会因异常而意外终止,增强程序的健壮性。
  2. try - catch - finally语句
    • try块:用于包含可能会抛出异常的代码。当try块中的代码抛出异常时,程序流程立即跳转到相应的catch块。如果try块中没有异常抛出,那么catch块中的代码将被跳过。
    • catch块:用于捕获并处理try块中抛出的异常。可以有多个catch块,每个catch块捕获特定类型的异常。异常类型是按照从子类到父类的顺序进行匹配的,所以子类异常的catch块要放在父类异常的catch块之前,否则会导致子类异常无法被捕获。当捕获到异常后,在catch块中可以进行相应的处理,如记录日志、给用户友好提示等。
    • finally块:无论try块中是否抛出异常,也无论catch块是否捕获到异常并处理,finally块中的代码总是会被执行。只有在以下两种极端情况下finally块不会执行:一是在try块中执行了System.exit(0),这会直接终止Java虚拟机;二是在执行到finally块之前发生了严重的系统错误,导致虚拟机崩溃。finally块常用于释放资源,如关闭文件、数据库连接等。

常见运行时异常(RuntimeException)

  1. NullPointerException:当应用程序试图在需要对象的地方使用null时抛出。例如,调用null对象的实例方法、访问null对象的属性、将null作为数组的长度等操作都会引发该异常。示例代码:
String s = null;
int length = s.length(); // 这里会抛出NullPointerException
  1. IndexOutOfBoundsException:当访问数组、字符串或其他有序集合时,如果索引超出了有效范围就会抛出该异常。它是一个泛型异常,常见的子类有ArrayIndexOutOfBoundsException(访问数组时索引越界)和StringIndexOutOfBoundsException(访问字符串时索引越界)。例如:
int[] arr = new int[5];
int num = arr[5]; // 这里会抛出ArrayIndexOutOfBoundsException,因为数组有效索引是0到4
  1. ArithmeticException:当出现异常的算术运算时抛出,如除以零。在整数运算中,除以零会抛出该异常;而在浮点数运算中,除以零会得到特殊的结果(Infinity或NaN),不会抛出此异常。示例:
int result = 10 / 0; // 这里会抛出ArithmeticException
  1. ClassCastException:当试图将一个对象强制转换为不兼容的类型时抛出。例如,将一个子类对象强制转换为它的非继承体系中的父类对象。示例:
Object obj = new Integer(10);
String str = (String) obj; // 这里会抛出ClassCastException,因为Integer不能转换为String
  1. IllegalArgumentException:当方法接收到一个不合法或不正确的参数时抛出。例如,某个方法要求参数必须为正数,但传入了负数。示例:
public void printPositive(int num) {
    if (num < 0) {
        throw new IllegalArgumentException("参数必须为正数");
    }
    System.out.println(num);
}
printPositive(-1); // 这里会抛出IllegalArgumentException