自定义异常

自定义异常类一般以Exception结尾,说明该类是一个异常类

必须继承Exception类(编译时异常),或者RuntimeException类(运行时异常)

通常在自定义异常类中添加一个带有String参数的构造方法,该参数用于存储异常的描述信息

一、 模拟用户注册

使用数组保存已经注册的用户名(数据库)

使用Scanner获取用户输入的用户名(前端页面)

定义一个方法,遍历用户数组,逐个比较(后台逻辑)

  • false:继续遍历
  • true:用户名已存在,抛出异常信息,提示用户 “亲,用户已被注册”
  • 循环结束,没有找到重复的用户名,则提示用户 “恭喜您,注册成功”
// 异常类
public class RegisterException extends Exception {
    // 构造方法赋值异常的描述信息
    public RegisterException(String message) {
        super(message);
    }
}

// 用户类
class User {
    void register() throws RegisterException {
        String name = "";
        System.out.println("请输入您的用户名:");
        Scanner scan = new Scanner(System.in);
        if (scan.hasNext()) {
            name = scan.next();
        }

        String[] names = {"刘备", "关羽", "张飞"};
        for (String s : names) {
            // if (s == name) {    // ==比较的是地址值
            if (s.equals(name)) {  // equals比较的是内容
                throw new RegisterException("亲,用户已被注册");
            }
        }
        System.out.println("恭喜您,注册成功");
    }
}

二、银行网点资金

通常情况下,计算两个整数之和的方法不会有任何异常发生

对某些特殊应用程序,比如一个整数代表收入,一个整数代表支出

Bank 类中有一个 income(int in, int out) 方法, in ≥ 0, out ≤ 0,并且 in+out ≥ 0

// 异常类
public class BankException extends Exception {
    String message;

    // 构造方法赋值异常的描述信息
    public BankException(int in, int out) {
        message = "入账资金" + in + "是负数或出账资金" + out + "正数";
    }

    public String warnMess() {
        return message;
    }
}

// 银行类
public class Bank {
    private int money;

    public int getMoney() {
        return money;
    }

    /**
     * 计算银行收入
     *
     * @param in
     * @param out
     */
    void income(int in, int out) throws BankException {
        if (in < 0 || out > 0 || in + out < 0) {
            throw new BankException(in, out);
        }
        int netIncome = in + out;
        money = money + netIncome;
        System.out.println("银行纯收入:" + netIncome);
    }
}

// 测试类
public class Test {
    public static void main(String[] args) {
        Bank bank = new Bank();
        try {
            bank.income(100, -100);
            bank.income(200, -100);
            bank.income(-100, -100); // 发生异常,转向catch
            bank.income(1000, -100); // 这行代码没有机会执行
        } catch (BankException e) {
            System.out.println(e.warnMess());
        }
        System.out.println("银行目前资金:" + bank.getMoney());
    }
}

在这里插入图片描述
三、货船装载集装箱

如果货船超重,货船认为这是一个异常

将拒绝装载集装箱,无论是否发生异常,货船都需要正点启航

// 异常类
public class DangerException extends Exception {
    // 异常的描述信息
    final String message = "超重";

    public String warnMess() {
        return message;
    }
}

// 货船类
public class CargoBoat {
    private int realContent; // 真实容量
    private int maxContent;  // 最大容量

    public void setMaxContent(int maxContent) {
        this.maxContent = maxContent;
    }

	/**
     * 货船装载货物
     *
     * @param temp
     * @throws DangerException
     */
    public void loading(int temp) throws DangerException {
        realContent += temp;
        if (realContent > maxContent) {
            realContent -= temp; // 装不下,再卸掉货物
            throw new DangerException();
        }
        System.out.println("目前货物容量:" + realContent);
    }
}

// 测试类
public class Test {
    public static void main(String[] args) {
        CargoBoat boat = new CargoBoat();
        boat.setMaxContent(1000); // 设置货船最大容量
        int temp = 200;
        try {
            boat.loading(temp);
            temp = 600;
            boat.loading(temp);
            temp = 600;
            boat.loading(temp); // 发生异常,转向catch
            temp = 100;         // 从这开始没有机会执行    
            boat.loading(temp); 
        } catch (DangerException e) {
            System.out.println(e.warnMess() + ",无法再装载" + temp + "吨的货物");
        } finally {
            System.out.println("货船正点起航..."); // finally 的内容一定执行
        }
    }
}

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

鱼悠奕

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

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

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

打赏作者

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

抵扣说明:

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

余额充值