一、前言

程序运行时出现的非语法错误(空指针、数组越界、除数为 0)统称为异常。如果不处理,程序会直接终止、崩溃。Java 提供了完善的异常处理机制,保证程序健壮性,是课程作业必考知识点。

二、异常的分类

1. 编译时异常(受检异常)

必须处理,否则代码报错 例:文件读写异常、日期解析异常

2. 运行时异常(非受检异常)

运行时才报错,编译不报错 例:空指针、数组越界、除数为 0

3. 错误 Error

系统级严重问题,程序无法处理

三、异常处理四大关键字

  • try:包裹可能出错的代码
  • catch:捕获并处理异常
  • finally:无论是否异常,一定执行(释放资源)
  • throws:抛出异常,交给上层处理

四、标准 try-catch-finally 示例

java

运行

public class ExceptionDemo {
    public static void main(String[] args) {
        try {
            int a = 10 / 0; // 除数为0异常
        } catch (ArithmeticException e) {
            System.out.println("算术异常:除数不能为0");
        } finally {
            System.out.println("代码执行完毕,无论是否报错都会执行");
        }
    }
}

五、throws 抛出异常

适用于:自己不想处理,交给调用者处理

java

运行

public class ThrowsDemo {
    public static void test() throws Exception{
        int[] arr = {1,2,3};
        System.out.println(arr[10]);
    }

    public static void main(String[] args) throws Exception {
        test();
    }
}

六、常用运行时异常

  • NullPointerException 空指针异常
  • ArrayIndexOutOfBoundsException 数组下标越界
  • ArithmeticException 算术异常
  • ClassCastException 类型转换异常

七、自定义异常(作业高频)

当系统自带异常不满足业务需求时,自定义业务异常:

java

运行

// 自定义异常类
class AgeException extends RuntimeException{
    public AgeException(String msg){
        super(msg);
    }
}

public class CustomException {
    public static void checkAge(int age){
        if(age < 0 || age > 150){
            throw new AgeException("年龄不合法!");
        }
    }

    public static void main(String[] args) {
        checkAge(200);
    }
}

八、总结

  1. 异常分为编译时异常、运行时异常、错误
  2. try-catch 捕获处理异常,防止程序崩溃;
  3. finally 用于资源释放;
  4. throws 向上抛出异常;
  5. 自定义异常可以实现业务规则校验,让程序更规范健壮。

更多推荐