编程自学指南:java程序设计开发,异常处理,什么是异常?,异常处理机制,自定义异常

编程自学指南:java程序设计开发,异常处理

学习目标

  1. 理解异常的概念与分类

  2. 掌握try-catch-finallythrows的用法

  3. 能够自定义异常并合理处理程序中的错误

  4. 避免异常处理中的常见反模式


一、课程引入

1.1 什么是异常?

  • 生活类比:程序像“做菜”,异常就是中途发生的意外(如没煤气、食材不足)

  • 核心概念

    • 异常:程序执行中的非正常情况(可恢复,如文件不存在)

    • 错误(Error):严重问题(不可恢复,如内存溢出)

1.2 异常的分类

  • 检查型异常(Checked):必须处理(如IOException

  • 非检查型异常(Unchecked):运行时异常(如NullPointerException


二、异常处理机制

2.1 try-catch块

语法

try {  
    // 可能抛出异常的代码  
} catch (异常类型1 e) {  
    // 处理异常1  
} catch (异常类型2 e) {  
    // 处理异常2  
} finally {  
    // 无论是否异常,最终执行的代码  
}
案例1:处理除零异常
try {  
    int a = 10 / 0;  
} catch (ArithmeticException e) {  
    System.out.println("除数不能为零!");  
    e.printStackTrace();  
}

2.2 多重catch块与finally

案例2:读取文件内容
try {  
    FileInputStream fis = new FileInputStream("test.txt");  
    int data = fis.read();  
} catch (FileNotFoundException e) {  
    System.out.println("文件不存在!");  
} catch (IOException e) {  
    System.out.println("读取文件失败!");  
} finally {  
    System.out.println("资源清理完成");  
}

2.3 throws与throw

  • throws:声明方法可能抛出的异常(交给调用者处理)

  • throw:主动抛出异常对象

案例3:验证用户年龄
public void setAge(int age) throws IllegalArgumentException {  
    if (age < 0) {  
        throw new IllegalArgumentException("年龄不能为负数!");  
    }  
    this.age = age;  
}


三、自定义异常

3.1 创建自定义异常

步骤
  1. 继承Exception(检查型异常)或RuntimeException(非检查型)

  2. 定义构造方法

案例4:用户登录失败异常
// 自定义异常类  
public class LoginFailedException extends RuntimeException {  
    public LoginFailedException(String message) {  
        super(message);  
    }  
}  

// 使用示例  
public void login(String username, String password) {  
    if (!isValid(username, password)) {  
        throw new LoginFailedException("用户名或密码错误!");  
    }  
}


四、综合应用与错误分析

4.1 综合案例

案例5:银行取款异常处理
public void withdraw(double amount) throws InsufficientBalanceException {  
    if (amount > balance) {  
        throw new InsufficientBalanceException("余额不足!");  
    }  
    balance -= amount;  
}  

// 调用处  
try {  
    account.withdraw(1000);  
} catch (InsufficientBalanceException e) {  
    System.out.println(e.getMessage());  
} 

4.2 常见错误与反模式

  • 错误1:捕获异常后不做处理

    try {  
        // ...  
    } catch (Exception e) {  
        // 空catch块(错误!)  
    }
  • 错误2:过度宽泛的异常捕获

    try {  
        // ...  
    } catch (Exception e) {  // 应捕获具体异常  
        // ...  
    }

五、总结与练习

5.1 总结

  • 核心机制try-catch处理异常,throws声明异常,throw抛出异常

  • 最佳实践

    • 优先处理具体异常,避免捕获Exception

    • 自定义异常增强代码可读性

5.2 课后任务

  1. 编写程序模拟ATM取款,处理余额不足和输入非数字的异常

  2. 自定义一个InvalidEmailException,验证邮箱格式合法性

  3. 预习下一节课:面向对象基础

5.3 扩展挑战

  • 实现一个带异常处理的文件复制工具(处理文件不存在、读写权限等问题)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zl515035644

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值