Java常见的异常类有哪些

让我用生动的例子来解释Java的异常体系:

想象你在开车,可能遇到的问题就像Java的异常:

  1. RuntimeException(运行时异常)就像是由于驾驶员自身原因造成的问题:
// 空指针异常:就像开车时闭着眼睛
String str = null;
str.length();  // 抛出 NullPointerException

// 数组越界:就像车开出道路边界
int[] array = new int[3];
array[5] = 1;  // 抛出 ArrayIndexOutOfBoundsException

// 类型转换异常:就像把摩托车当成汽车开
Object obj = new Integer(1);
String str = (String)obj;  // 抛出 ClassCastException

// 算术异常:就像以零速度计算行驶时间
int result = 10 / 0;  // 抛出 ArithmeticException
  1. 检查型异常(其他异常)就像是外部环境造成的问题,必须提前考虑处理方案:
try {
    // 文件未找到异常:就像导航找不到目的地
    FileInputStream file = new FileInputStream("不存在的文件.txt");
    
    // IO异常:就像遇到道路施工封路
    file.read();
    
    // SQL异常:就像加油站系统故障
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/db");
} catch (FileNotFoundException e) {
    // 处理文件未找到的情况
    System.out.println("找不到文件,请检查路径");
} catch (IOException e) {
    // 处理IO异常
    System.out.println("读取文件失败");
} catch (SQLException e) {
    // 处理SQL异常
    System.out.println("数据库连接失败");
}
  1. 自定义异常就像制定自己的行车规则:
// 自定义检查型异常
class SpeedTooHighException extends Exception {
    public SpeedTooHighException(String message) {
        super(message);
    }
}

// 自定义运行时异常
class FuelEmptyException extends RuntimeException {
    public FuelEmptyException(String message) {
        super(message);
    }
}

class Car {
    private int speed;
    private int fuel;
    
    public void accelerate(int speed) throws SpeedTooHighException {
        if (speed > 200) {
            throw new SpeedTooHighException("速度超过200km/h,太危险了!");
        }
        this.speed = speed;
    }
    
    public void drive() {
        if (fuel <= 0) {
            throw new FuelEmptyException("没油了,请加油!");
        }
        // 继续行驶
    }
}

异常处理的最佳实践:

public class ExceptionHandlingDemo {
    public void demonstrateExceptionHandling() {
        try {
            // 可能抛出异常的代码
            riskyOperation();
            
        } catch (IllegalArgumentException e) {
            // 具体异常处理
            System.out.println("参数不正确: " + e.getMessage());
            
        } catch (Exception e) {
            // 通用异常处理
            System.out.println("发生未预期的错误: " + e.getMessage());
            
        } finally {
            // 清理工作,一定会执行
            System.out.println("清理资源");
        }
    }
}

记住以下要点:

  1. RuntimeException(运行时异常)

    • 不需要强制处理
    • 通常是程序逻辑问题
    • 应该通过代码逻辑避免
  2. 检查型异常

    • 必须处理或声明throws
    • 通常是外部环境问题
    • 需要合理的异常处理机制
  3. 异常处理原则

    • 只捕获可以处理的异常
    • 尽早抛出,尽晚捕获
    • finally块用于清理资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值