关于throw的总结

1.父类异常预定义
在可能产生异常的动作后边,加上【可能出现的异常】,相较于子类,只能多不能少
        示例:abstract void gets(double t) throws noMoney, exit;//取钱会出现错误
取钱的时候可能会遇到的两种错误,在动作void后方加上throws

2.子类异常预定义
 也是后边加上throws,只能是父类定义中的部分异常处理,父类没定义的异常处理不能加
        示例:

3.自定义异常
在ASRC同级,定义class,后面需要拓展Exception父类,书写示例
内侧可以定义无参构造,在定义出现异常捕获(catch)的时候,相当于实例化这个异常,会自动执行无参构造,我们这里使用void只是为了IDEA可以把代码块折叠起来,我们在


        4.try-catch机制
                A.这俩要紧贴在一起,中间不能有其他的语句
                B.catch括号内相当于实例化一个异常,名称叫做e(类似于结构体实例化)
        如果有定义无参构造,会自动执行;也可以重载带参数的构造
                C.调用有参构造时,无参构造就不会被执行了;这里图省事之写了一个普通动作


        5.异常的产生(抛出)
                A.抛出异常的时候,会终止try块,执行catch
                B.看块的位置知道中断后 try-catch 执行完成,会继续顺序执行下边的代码
                C.以此可以知道密码输入错误后会返回menu而不是终止while

//【头文件】import java.util.Scanner;
import java.lang.Math;//【结构体模块】   其实本来还想搞个花呗卡的,下次一定
abstract class Card {//父类常规卡String Name;//开户人姓名String ID;//卡号String pas;//密码String qus;//密保String ans;//密保回答double mon;//余额boolean sex;//性别Card() {}Card(String Name, String ID, String pas, String qus, String ans, boolean sex) {this.Name = Name;this.ID = ID;this.pas = pas;this.qus = qus;this.ans = ans;this.sex = sex;}public final void save(double t) {mon += t;System.out.printf("成功存款:%.2f元,当前余额:%.2f元\n\n", t, mon);}abstract void show();abstract void gets(double t) throws noMoney;//取钱会出现错误
}//父类:卡类型class sCard extends Card {String type;public sCard() {super();type = "储蓄卡";mon = -1;}public sCard(String Name, String ID, String pas, String qus, String ans, boolean sex) {super(Name, ID, pas, qus, ans, sex);//开户type = "储蓄卡";}public void gets(double t) throws noMoney {if (t > mon)throw new noMoney();elsemon -= t;yy();}//取钱,需要异常处理public void show() {System.out.printf("\n\n早上好!%s" + (sex ? "先生" : "女士"), Name);System.out.printf("  您的%s(%s) 余额:%.2f\n", type, ID, mon);//true男士,false女士}//基本卡面信息public void yy() {System.out.printf("当前余额:%.2f\n\n", mon);}//显示余额
}//子类:储蓄卡//【异常处理模块】
class noMoney extends Exception {void why() {System.out.printf("你太穷了哈哈哈哈(余额不足)!\n\n");}
}//余额不足异常class exit extends Exception {void why() {System.out.printf("当前账户已存在,不可再申请\n\n");}
}//账户已经存在异常class selExt extends Exception {void why() {System.out.printf("您的选择有误,重新输入!\n\n");}
}//sel选择溢出class wID extends Exception {void why() {System.out.printf("查无此ID!\n\n");}
}//登陆ID异常class wPA extends Exception {void why() {System.out.printf("登陆密码错误!\n\n");}
}//登录密码错误class wQU extends Exception {void why() {System.out.printf("密保回答错误!\n\n");}
}//密保答案错误
//其实可以搞无参构造的,但是这样会导致大括号不能折叠,看起来很恶心//【Main调动区】
class ASRC {//极光-科研中心public static void main(String[] ASRC) {Scanner sc = new Scanner(System.in);int sel = 0;sCard SXH = new sCard();//苏晓辉储蓄卡while (sel != 4) {menu();             //【操作界面1号-基础区域】sel = sc.nextInt();try {switch (sel) {case 1: {if (SXH.mon != -1)throw new exit();//抛出账户存在的异常String name, id, pas, qus, ans;System.out.printf("开户人姓名:");name = sc.next();System.out.printf("登录卡号:");id = sc.next();System.out.printf("账户密码:");pas = sc.next();System.out.printf("密保问题:");qus = sc.next();System.out.printf("密保答案:");ans = sc.next();boolean sex = true;String sexx;do {System.out.printf("性别:");sexx = sc.next();if (sexx.equals("男"))sex = true;else if (sexx.equals("女"))sex = false;elseSystem.out.printf("性别输入有误,请重新输入!\n");} while (!sexx.equals("男") && !sexx.equals("女"));SXH = new sCard(name, id, pas, qus, ans, sex);break;}//开户case 2: {{System.out.printf("账户ID:");String id = sc.next();if (!id.equals(SXH.ID))//ID异常处理throw new wID();System.out.printf("登陆密码:");String pa = sc.next();if (!pa.equals(SXH.pas))//密码异常处理throw new wPA();SXH.show();}//登录模块int idx = 2745;while (idx != 4) {//登录成功【操作界面2号-登录区】menu2(SXH);idx = sc.nextInt();try {switch (idx) {case 1: {System.out.printf("存款金额:");double t = sc.nextDouble();SXH.save(t);break;}//存钱case 2: {System.out.printf("取款数额:");double t = sc.nextDouble();SXH.gets(t);break;}//取钱case 3: {SXH.yy();break;}//查询余额case 4: {System.out.printf("安全退出中.....");break;//啥也不干,等退出}//退出default: {throw new selExt();}//异常}} catch (noMoney e) {e.why();}//这里部署noMoney异常,就不会因为太穷被赶出银行}break;}//登录case 3: {{System.out.printf("%s?\n您回答:", SXH.qus);String t = sc.next();if (!t.equals(SXH.ans))throw new wQU();}//密保验证模块int idx = 2745;String t;while (idx != 0) {menu3(SXH);idx = sc.nextInt();try {switch (idx) {case 1: {System.out.printf("修改开户人姓名为:");SXH.Name = sc.next();break;}//namecase 2: {System.out.printf("修改开户人ID为:");SXH.ID = sc.next();break;}//idcase 3: {System.out.printf("修改开户人密码为:");SXH.pas = sc.next();break;}//passwordcase 4: {System.out.printf("性别修改~");SXH.sex = !SXH.sex;break;}//sexcase 5: {System.out.printf("修改开户人密保为:");SXH.qus = sc.next();break;}//密保case 6: {System.out.printf("修改密保答案为:");SXH.ans = sc.next();break;}//anscase 0: {break;}//退出default: {throw new selExt();}}} catch (selExt e) {e.why();}}break;}//修改密保case 4: {break;}//退出default: {throw new selExt();}//异常}} catch (exit e) {e.why();//只要创建异常实例,就会自动执行无参构造,里面不用写东西} catch (selExt e) {e.why();} catch (wID e) {e.why();} catch (wPA e) {e.why();} catch (wQU e) {e.why();}System.out.printf("\n\n\n");}}//【静态辅助函数区域】Switch支持public static void menu() {System.out.printf("欢迎访问【苏晓辉银行】ATM系统\n");System.out.printf("1-开户申请   2-登录系统\n");System.out.printf("3-信息修改   4-退出\n");System.out.printf("您决议:");}public static void menu2(sCard t) {System.out.printf("选择您要办理的业务  当前余额:%.2f\n", t.mon);System.out.printf("1-存钱   2-取钱  3-查询余额\n");System.out.printf("4-安全退出\n您选择:");}public static void menu3(sCard t) {System.out.printf("\n\n您已取得账户最高权限!\n");System.out.printf("开户人姓名:%s  当前余额:%.2f\n", t.Name, t.mon);System.out.printf("账户ID:%s\n", t.ID);System.out.printf("密码:%s\n", t.pas);System.out.printf("密保问题:%s\n", t.qus);System.out.printf("密保答案:%s\n", t.ans);System.out.printf("性别:%s\n", t.sex ? "男" : "女");System.out.printf("您要修改的信息:\n");System.out.printf("1-开户人姓名   2-账户ID\n");System.out.printf("3-账户密码     4-性别\n");System.out.printf("5-密保问题     6-密保回答\n");System.out.printf("0-退出\n");System.out.printf("您决议:");}
}

极光 · Java ATM存款机(throw异常测试)相关推荐

  1. 项目案列:银行ATM存款机系统(笔记经典案列)

    第一步数据库设计: 1.明确了解银行业务需求,围绕银行的需求进行分析,确认银行ATM存款机有紧密关系的实体,并得到每个实体的必要属性 2.绘制E-R图 描述: 使用数据库设计工具,把设计数据库第一步的 ...

  2. 银行ATM存款机系统

    --创建建库bankDB use master CREATE DATABASE bankDBON(NAME='bankDB_data',FILENAME='e:\bankDB_data.mdf',SI ...

  3. java atm程序设计_Java ATM机操作界面程序哦

    Java ATM机操作界面程序哦 //以下是我写的ATM操作界面的程序// //请高手赐教如何添加背景图形????// import java.awt.*; import java.awt.event ...

  4. 用JAVA写模拟自动存款机系统

    一共只写了三个类分别是Personal,CRS,BankSystem,个人文档数据存在项目下文件里,和src同级.每个人创建一个txt,有一个用户集.txt,里面存储着所有人的ID. 个人信息只有三个 ...

  5. atm机存款场景图_atm存钱(自动存款机存钱演示图)

    钱并不是只有到柜台才能存的,跟取钱一样,存钱也能在机器上完成. 各银行都推出了自动存款机(CDM),客户可直接在上面存款,操作跟自动柜员机(ATM)差不多. 存款要用 自动存款机或者存取款一体机 存款 ...

  6. atm机存款场景图_atm机可以存钱吗(自动存款机存钱演示图)

    同上...... 对银行来说,自助存款机能有效分流柜台的人流,提高效率:对市民而言,自助存款. 而且只要你需要,随时可以存款.但是,从目前的情况来看,银行的自助存款机可以. 可是附近没有建行 想就近存 ...

  7. 自助取款机(ATM)与自助存款机(CDM)工作原理

    [转载]原文出处:http://blog.sina.com.cn/s/blog_544a29990100doqn.html 特别说明:目前我国商业银行使用的ATM与CDM主要是德国和日本生产,ATM自 ...

  8. JUnit单元测试案例——异常测试(测试语言Java)

    一. 异常测试 对可能抛出的异常进行测试: 异常本身是方法签名的一部分: public static int parselnt(String s) throws NumberFormatExcepti ...

  9. java atm柜机_java课程设计-ATM柜机模拟程序.doc

    java课程设计-ATM柜机模拟程序 课程设计(大作业)报告课程名称:面向对象程序设计课程设计 设计题目:ATM柜员机模拟程序 院 系:信息技术学院 班 级: 设 计 者: 学 号: 指导教师: 设计 ...

最新文章

  1. javascript-tab切换效果
  2. ubuntu16.04_install_saltstack_更新版本
  3. mysql grant %_MySQL的Grant命令详解
  4. 命令执行——系统命令执行(三)
  5. python3.8学习_python3.8.1 入门基础学习 之 【字典】 学习
  6. Angular 内容投影 II
  7. 安防监控工程中该如何选择光端机?
  8. 重装系统后,快盘不能拷贝进文件的解决办法
  9. 偶也要去上海Tech一把了
  10. 2019 年总结 | 31岁,不过是另一个开始
  11. python树莓派编程_python树莓派编程
  12. php三年经验 多少工资_PHP2年以上经验,在深圳工资能拿多少?
  13. php查询sql语句错误,Thinkphp3.2.3在SQL执行错误时查看SQL语句
  14. 队的顺序存储和链式存储
  15. 关于word安全模式
  16. LZW编码算法原理及实例应用
  17. .[转] 全国主体功能区规划图
  18. 泛泰A880S再次救砖成功,记录一下
  19. 如何打开被关闭的任务管理器
  20. 网络 · IPv4协议

热门文章

  1. IT忍者神龟之JMeter-使用Badboy录制Web测试脚本
  2. java游戏循环_利用Java循环语句实现攻击防御塔小游戏
  3. CE认证,CE-LVD标准办理流程,亚马逊欧洲站
  4. 【SQL中阶】 SQL多表联查(配合多条件复杂查询)
  5. PHP医院网络预约管理系统源码(可商用也可作毕业设计)
  6. SpringBoot 学习之 No bean named ‘xxx’ available
  7. STM32实战-无源蜂鸣器
  8. WinForm实现通用的窗体基于屏幕中间或父窗体中间
  9. MySQL怎么运行的系列(五)Innodb表空间(table space)、区(extent)和段(segment)
  10. 2020.7.4-参加YMO数学竞赛复赛