异常异常的解决

异常是程序编译或运行时发生的意外情况

Exception 编译期异常,编译期必须处理

RuntimeException 运行时异常,不必须处理,可以通过调整代码来避免

Error 错误,内存溢出等都是错误,不能解决

异常的解决:

​    throws抛出异常,不解决,一旦发生程序会崩溃

​    try-catch捕获异常,解决异常,程序继续运行

**银行卡取款案例**
/**
 * 测试编译期异常
 */
public class Demo01 {
    public static void main(String[] args)  {

        //日期格式化类对象
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");

        Date date = new Date();
        String s = sdf.format(date);//按照指定格式来格式化日期对象
        System.out.println("s = " + s);
        
        //解析字符串时,会抛出编译期异常:PaserException
        try {//try块放的是可能会发生异常的代码
            System.out.println(1);
            Date date2 = sdf.parse("2022年07月12日");//抛出了异常?编译期异常
            System.out.println(2);
            System.out.println("date2 = " + date2);
        } catch (ParseException e) {//一旦发生异常被catch语句捕获
            System.out.println(3);
            //e.printStackTrace();
        } finally {//无论try语句是否发生异常,都会执行
            System.out.println(4);
        }
        System.out.println(5);
        System.out.println("-->程序执行结束..");
    }
}

运行时异常
String s1 = "";
System.out.println(s1.charAt(0));//运行时异常:StringIndexOutofBoundsException
```

自定义异常(1.继承Exception的编译期异常  2.继承RuntimeException的运行时异常)
/**
 * 测试ATM取款
 */
public class Test {
    public static void main(String[] args) {
        //创建取款机
        ATM atm = new ATM();

        //创建银行卡
        BankCard bankCard = new BankCard();
        bankCard.setBalance(5000);//设置卡内余额

        //模拟ATM取款
        atm.setBankCard(bankCard);//插卡
        try {
            atm.withdrawMoney();//取款功能
        } catch (BalanceNotEnoughException e) {
            e.printStackTrace();
        }
        System.out.println("-->程序运行结束");
    }
}
/**
 * 银行卡
 *  余额
 */
class BankCard{
    private double balance; //余额
    public double getBalance() {
        return balance;
    }
    public void setBalance(double balance) {
        this.balance = balance;
    }
}
/**
 * ATM机
 *  插卡
 *  取款
 */
class ATM{
    private BankCard bankCard; //ATM机卡槽

    /**
     * 取款的方法
     */
    public void withdrawMoney() throws BalanceNotEnoughException {
        System.out.println("--请输入取款金额:");
        int money = new Scanner(System.in).nextInt();
        //判断卡余额是否足够
        if(money<=this.bankCard.getBalance()){
            System.out.println("-->提示:取款成功!!");
            this.bankCard.setBalance(this.bankCard.getBalance()-money);
            System.out.println("-->提示:取款"+money+"元,卡内余额:"+this.bankCard.getBalance());
        }else{
            //抛出一个余额不足异常
            //System.out.println("-->警告:余额不足");
            throw new BalanceNotEnoughException();
        }
    }

    public BankCard getBankCard() {
        return bankCard;
    }
    //当作插卡
    public void setBankCard(BankCard bankCard) {
        this.bankCard = bankCard;
    }
}
--请输入取款金额:
5001
cn.hp.demo04.BalanceNotEnoughException: 警告!!账号余额不足!!
    at cn.hp.demo04.ATM.withdrawMoney(Test.java:64)
    at cn.hp.demo04.Test.main(Test.java:22)
-->程序运行结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值