首页 > Java > Java异常和错误

Java异常和错误

2025-04-17 15:06:06

在 Java 里,异常和错误都属于 Throwable 类的子类,它们用于处理程序里出现的不正常状况。下面为你详细介绍 Java 异常和错误的相关知识。

异常和错误的区别

  • 异常(Exception):是程序运行时可预料的不正常情况,一般能够通过代码进行处理。异常又可分为受检查异常(Checked Exception)和非受检查异常(Unchecked Exception)。
    • 受检查异常:在编译阶段就会被检查,若方法可能抛出此类异常,就必须在方法签名中声明或者进行捕获处理。像 IOExceptionSQLException 等都属于受检查异常。
    • 非受检查异常:也叫运行时异常(RuntimeException),编译阶段不会检查,通常是由程序逻辑错误引发的,例如 NullPointerExceptionArrayIndexOutOfBoundsException 等。
  • 错误(Error):表示程序运行时出现的严重问题,通常是系统级别的错误,一般无法通过代码处理。比如 OutOfMemoryErrorStackOverflowError 等。

异常处理机制

Java 提供了 try-catch-finally 语句块来处理异常,具体语法如下:

try {
    // 可能会抛出异常的代码
} catch (ExceptionType1 e1) {
    // 处理 ExceptionType1 类型的异常
} catch (ExceptionType2 e2) {
    // 处理 ExceptionType2 类型的异常
} finally {
    // 无论是否发生异常,都会执行的代码
}

下面是一个简单的示例:

public class ExceptionExample {
    public static void main(String[] args) {
        try {
            int[] numbers = {1, 2, 3};
            System.out.println(numbers[3]); // 会抛出 ArrayIndexOutOfBoundsException
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("数组越界异常: " + e.getMessage());
        } finally {
            System.out.println("无论是否发生异常,这里的代码都会执行。");
        }
    }
}

抛出异常

若方法无法处理某个异常,可使用 throw 关键字抛出异常,同时使用 throws 关键字在方法签名中声明该异常。示例如下:

public class ThrowExample {
    public static void divide(int a, int b) throws ArithmeticException {
        if (b == 0) {
            throw new ArithmeticException("除数不能为零");
        }
        int result = a / b;
        System.out.println("结果: " + result);
    }

    public static void main(String[] args) {
        try {
            divide(10, 0);
        } catch (ArithmeticException e) {
            System.out.println("捕获到异常: " + e.getMessage());
        }
    }
}

自定义异常

你可以自定义异常类,只需继承 Exception 或 RuntimeException 类。下面是一个自定义异常的示例:

// 自定义异常类
class CustomException extends Exception {
    public CustomException(String message) {
        super(message);
    }
}

// 使用自定义异常的类
public class CustomExceptionExample {
    public static void checkAge(int age) throws CustomException {
        if (age < 0) {
            throw new CustomException("年龄不能为负数");
        }
        System.out.println("年龄合法: " + age);
    }

    public static void main(String[] args) {
        try {
            checkAge(-5);
        } catch (CustomException e) {
            System.out.println("捕获到自定义异常: " + e.getMessage());
        }
    }
}

总结

  • 异常是程序运行时可预料的不正常情况,可通过 try-catch-finally 语句块进行处理。
  • 错误是系统级别的严重问题,一般无法通过代码处理。
  • 可使用 throw 关键字抛出异常,使用 throws 关键字在方法签名中声明异常。
  • 能自定义异常类,继承 Exception 或 RuntimeException 类。

通过上述内容,你应该对 Java 异常和错误有了更深入的理解。在实际开发中,合理运用异常处理机制能够增强程序的健壮性和可维护性。

使用 Ctrl+D 可将网站添加到书签
收藏网站
扫描二维码
关注早实习微信公众号
官方公众号
Top