【实验内容-1】自定义异常类的应用

目录

【任务介绍】

【任务目标】

【任务分析】见具体任务介绍

【任务实现】

【实验结果(包括输入数据和输出结果)】


【任务介绍】

1.写一个抽象账户类(Account) 

包含属性:  id:账户号码  name:账户姓名  balance:账户余额

deposit: 存款方法,参数是double型的金额,要求不允许子类修改

withdraw取款方法,参数是double型的金额抽象方法,具体取款操作在两个子类中分别实现

包含的构造方法:无参数构造方法:用于子类调用

有参构造方法:用于设置必要的属性

2.写一个子类储蓄账户(SavingAccount)继承抽象类Account

实现抽象方法withdraw,储蓄账户不允许透支,在取款发生余额不足的情况下要产生BalanceNotEnoughException

3.写一个子类信用账户(CreditAccount)继承抽象类Account

增加属性 ceiling 透支额度可以透支,并允许设置透支额度.实现抽象方法withdraw,在取款发生超过透支额度的情况下要产生OverDraftNotEnoughException

4.写出异常类:        BalanceNotEnoughException :用于取钱的时候余额不足的异常情况(继承父类Exception,新增一个成员变量String message,写一个有参构造方法用于构造异常对象,构建异常信息message,然后再新增一个warnMessage方法,用于返回message.

OverDraftNotEnoughException:用于取钱时超过透支额度的异常情况(继承父类Exception新增一个成员变量String message,写一个有参构造方法用于构造异常对象,构建异常信息message,然后再新增一个warnMessage方法,用于返回message.

5.写一个测试类TestAccount对各操作进行测试,并对产生多种异常进行分别处理输出各自的异常信息

任务目标】

  1. 进步掌握具体子类重写(覆盖、实现)抽象父类中的方法
  2. 独立完成银行抽象类的设计和自定义异常类的”的源代码编写、编译及运行。
  3. 掌握自定义异常类的应用

任务分析】见具体任务介绍

【任务实现】

abstract class Account{
    private String id;
    private String name;
    private double balance;

    public double getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }

    public final void deposit(double money){
        this.balance+=money;
    }

    public abstract void withdraw(double money)throws Exception;

    public Account(){

    }

    public Account(String id, String name, double balance) {
        this.id = id;
        this.name = name;
        this.balance = balance;
    }
}

class SavingAccount extends Account{
    public SavingAccount(String id, String name, double balance) {
        super(id, name, balance);
    }

    public void withdraw(double money) throws BalanceNotEnoughException{
        if(money>super.getBalance()){
            throw new BalanceNotEnoughException(money,super.getBalance());
        }
        super.setBalance(super.getBalance()-money);
    }

}

class CreditAccount extends Account{
    private double ceiling;

    public CreditAccount(String id, String name, double balance, double ceiling) {
        super(id, name, balance);
        this.ceiling = ceiling;
    }

    @Override
    public void withdraw(double money)throws OverDraftNotEnoughException {
        if(money>ceiling+super.getBalance()){
            throw new OverDraftNotEnoughException(money,ceiling,super.getBalance());
        }
        super.setBalance(super.getBalance()-money);
    }
}

class BalanceNotEnoughException extends Exception{
    private String message;

    public BalanceNotEnoughException(double money,double balance) {
        this.message="当前余额 "+balance+"元,"+"无法支取"+money+"元";
    }
    public String warnMessage(){
        return this.message;
    }
}

class OverDraftNotEnoughException extends Exception{
    private String message;

    public OverDraftNotEnoughException(double money,double ceiling,double balance) {
        this.message="当前余额"+balance+"元"+"透支额度"+ceiling+ "无法支取"+money+"元";
    }
    public String warnMessage(){
        return this.message;
    }
}




public class TestAccount{
    public static void main(String args[]) {
        SavingAccount savingAccount=new SavingAccount("0011988938","小王",1000);
        CreditAccount creditAccount=new CreditAccount("1248998989","小王",2000,1000);
        try{
            savingAccount.withdraw(500);
            savingAccount.withdraw(600);
        }
        catch(BalanceNotEnoughException e){
            System.out.println("取款过程中发生余额不足异常:");
            System.out.println(e.warnMessage());

        }
        try{
            creditAccount.withdraw(1000);
            creditAccount.withdraw(1500);
            creditAccount.deposit(200);
            creditAccount.withdraw(600);
            creditAccount.withdraw(200);
        }
        catch(OverDraftNotEnoughException e){
            System.out.println("取款过程中发现透支额度不足异常:");
            System.out.println(e.warnMessage());
        }
    }
}

【实验结果(包括输入数据和输出结果)】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/636535.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于Matlab实现声纹识别系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 声纹识别,也称为说话人识别,是一种通过声音判别说话人身份的生物识别技…

线段(线性dp)

题目链接:[TJOI2007] 线段 - 洛谷 思路: f[i][0]表示走完第i行且停在第i行的左端点最少用的步数 f[i][1]同理,停在右端点的最少步数。 那么转移就很简单了,走完当前行且停到左端点,那么一定是从右端点过来的&#x…

“腾讯云 AI 代码助手”体验

一、“腾讯云 AI 代码助手”体验 1、注册账号并进行实名认证 2、进入开发环境 3、体验javascript简单函数 代码如下: //请写一个两个日期计算的函数 function dateDiff(date1, date2) {return date2.getTime() - date1.getTime(); } var date1 new Date("2…

Elastic Cloud Serverless 定价和打包

作者:来自 Elastic Clint Scott 借助 Elastic Cloud Serverless,我们通过针对安全性、可观察性和 Elasticsearch 的新解决方案特定定价和打包来简化并提供更高的灵活性。 Elastic Cloud 定价的演变 Elastic Cloud 长期以来一直是使用 Elastic Stack 的最…

# 分布式链路追踪_skywalking_学习(1)

分布式链路追踪_skywalking_学习(1) 一、APM 系统概述 1、什么是 APM 系统? APM :全称 Application Performance Management 即应用性能管理系统。是对企业系统即时监控以实现对应用程序性能管理和故障管理的系统化的解决方案。…

【leetcode】排序算法总结

第 11 章 排序 - Hello 算法动画图解、一键运行的数据结构与算法教程https://www.hello-algo.com/chapter_sorting/ 堆排序 #include <iostream> #include <vector>using namespace std;/* 堆的长度为 len &#xff0c;从节点 i 开始&#xff0c;从顶至底堆化 *…

【vue部署】Apache部署vue项目

Apache部署vue项目 Apache 下载安装(windows)1. 下载2. 安装3. 启动服务 vue 部署配置1. 基础配置2. 解决页面刷新问题 Apache 下载安装(windows) 1. 下载 Apache 2.4.59 下载地址&#xff1a;httpd-2.4.59-240404-win64-VS17.zip Visual C Redistributable for Visual Studi…

Python解析网页-XPath

目录 1、什么是XPath 2、安装配置 3、XPath常用规则 4、快速入门 5、浏览器XPath工具 1.什么是XPath XPath&#xff08;XML Path Language&#xff09;是一种用于在XML文档中定位和选择节点的语言。 它是W3C&#xff08;World Wide Web Consortium&#xff09;定义的一种标…

Springboot+Element_分页+显示+搜索+完整版

目录 显示效果 新建项目时选择的依赖 文件的目录结构 一、准备工作 1、配置文件 2、pom增加PageHelper 3、在idea中建立数据库连接&#xff0c; 4、新建peom表&#xff08;如已建好&#xff0c;则忽略本条&#xff09; 二、新建前端页面index.html&#xff08;未连后端…

Redis --学习笔记

Redis简介 一个基于内存的key-value结构数据库。Redis 是互联网技术领域使用最为广泛的存储中间件 特点&#xff1a; 基于内存存储&#xff0c;读写性能高 适合存储热点数据&#xff08;热点商品、资讯、新闻&#xff09; 企业应用广泛 Redis默认端口号为6379 Redis是用…

Web安全:企业如何抵御常见的网络攻击?

近年来随着人类社会向数字世界的加速发展&#xff0c;勒索软件攻击事件在全球范围内呈现快速上升的态势&#xff0c;几乎所有国家的政府、金融、教育、医疗、制造、交通、能源等行业均受到影响&#xff0c;可以说有互联网的地方就可能发生勒索软件攻击事件。 Web安全是一个大课…

【调试笔记-20240520-Linux-在 WSL2 / Ubuntu 20.04 中编译 QEMU 可运行的 OVMF 固件】

调试笔记-系列文章目录 调试笔记-20240520-Linux-在 WSL2 / Ubuntu 20.04 中编译 QEMU 可运行的 OVMF 固件 文章目录 调试笔记-系列文章目录调试笔记-20240520-Linux-在 WSL2 / Ubuntu 20.04 中编译 QEMU 可运行的 OVMF 固件 前言一、调试环境操作系统&#xff1a;Windows 10 …

科技赋能,拓宽生活边界

在当今多元化与快速变化的社会中&#xff0c;社会适应能力成为了衡量个人能否顺利融入社会、享受生活品质的关键指标。对于盲人朋友而言&#xff0c;这一能力尤为重要&#xff0c;它不仅关乎日常生活的便利&#xff0c;更影响到心理的健康与社会参与度。在此背景下&#xff0c;…

ERP与MES系统中的产品装配结构与序列号管理

在企业资源计划&#xff08;ERP&#xff09;系统中&#xff0c;产品不仅仅是物料的简单集合&#xff0c;它们还扮演着转配件的角色。通过物料清单&#xff08;BOM&#xff09;的形式&#xff0c;ERP系统能够详细表达出产品的装配结构。例如&#xff0c;在个人电脑&#xff08;P…

颠覆传统编码,零基础也能飞的工具!

YDUIbuilder以其低代码的设计理念&#xff0c;通过简单的拖拽操作&#xff0c;即使是编程新手也能快速构建出专业的用户界面。这不再是一个遥不可及的梦想&#xff0c;而是一个触手可及的现实。 组件化世界&#xff0c;创意无限&#xff1a;构建梦想中的界面 在YDUIbuilder的组…

电脑刚删除的东西怎么恢复?学会这5招,轻松恢复!

“我刚刚一不小心把电脑里的一个重要文件删除了&#xff0c;现在不知道应该怎么操作才能恢复这个文件&#xff0c;有没有可以分享一下恢复方法的朋友呀&#xff1f;非常感谢&#xff01;” 在日常使用电脑的过程中&#xff0c;误删文件或文件夹的情况时有发生。这些被删除的文件…

大厂程序员离职,开发一个盲盒小程序2万,一周开发完!

大家好&#xff0c;我是程序员小孟&#xff01; 前面接了一个盲盒的小程序&#xff0c;主要的还是商城&#xff0c;盲盒的话只是其中的有一个活动。 现在的年轻人是真的会玩&#xff0c;越来越新的东西出来&#xff0c;越来越好玩的东西流行。 就像最近很火的地摊盲盒。 讲…

快速开发 Chrome插件

什么是 Chrome 插件 Chrome 插件程序是一种用于增强 Google Chrome 浏览器功能的小型软件应用程序。它们可以帮助用户自定义浏览体验、添加新功能、集成外部服务以及自动化任务等。扩展程序使用 HTML、CSS 和 JavaScript 编写&#xff0c;利用 Chrome 提供的 API 来与浏览器及…

昔日辉煌不再,PHP老矣,尚能饭否?

导语 | 近期 TIOBE 最新指数显示&#xff0c;PHP 的流行度降至了历史最低&#xff0c;排在第 17 名&#xff0c;同时&#xff0c;在年度 Stack Overflow 开发者调查报告中&#xff0c;PHP 在开发者中的受欢迎程度已经从之前的约 30% 萎缩至现在的 18%。“PHP 是世界上最好的语言…

JS Navigator.sendBeacon 可靠的、异步地向服务器发送数据

JS Navigator.sendBeacon 可靠的、异步地向服务器发送数据 前言 我们在上一篇页面访问&页面关闭数据上报的文章中使用了 sendBeacon 方法用来发送数据&#xff0c;上篇文章是简单使用&#xff0c;那本篇文章我们就详细了解下这个东西。 一、Navigator.sendBeacon 是什么…