how2j.cn

步骤 1 : 练习-异常综合1   
步骤 2 : 答案-异常综合1   
步骤 3 : 练习-异常综合2   
步骤 4 : 答案-异常综合2   

步骤 1 :

练习-异常综合1

edit  姿势不对,事倍功半! 点击查看做练习的正确姿势
这是一个类图
Account类: 银行账号
属性: balance 余额
方法: getBalance() 获取余额
方法: deposit() 存钱
方法: withdraw() 取钱
OverdraftException: 透支异常,继承Exception
属性: deficit 透支额
练习-异常综合1
步骤 2 :

答案-异常综合1

edit
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
查看本答案会花费4个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
查看本答案会花费4个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
账号未激活 账号未激活,功能受限。 请点击激活
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

5分18秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器


package exception; public class Account { protected double balance; public Account(double balance) { this.balance = balance; } public double getBalance() { return balance; } public void deposit(double amt){ this.balance+=amt; } public void withdraw(double amt) throws OverDraftException{ if(this.balance<amt) throw new OverDraftException("余额不足", amt-this.balance); this.balance-=amt; } public static void main(String[] args) { //开户存了1000 Account a = new Account(1000); //存钱1000 a.deposit(1000); //查看余额 System.out.println(a.getBalance()); try { //取2001 a.withdraw(2001); } catch (OverDraftException e) { System.err.println("透支金额:"+e.getDeficit()); e.printStackTrace(); } } }
package exception; public class OverDraftException extends Exception{ private double deficit; public double getDeficit() { return deficit; } public OverDraftException(String msg, double deficit) { super(msg); this.deficit = deficit; } }
步骤 3 :

练习-异常综合2

edit  姿势不对,事倍功半! 点击查看做练习的正确姿势
类: CheckingAccount 支票账户,具备透支额度,继承Account
属性:overdraftProtection 透支额度
练习-异常综合2
步骤 4 :

答案-异常综合2

edit
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
查看本答案会花费4个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
查看本答案会花费4个积分,您目前总共有点积分。查看相同答案不会花费额外积分。 积分增加办法 或者一次性购买JAVA 中级总计0个答案 (总共需要0积分)
账号未激活 账号未激活,功能受限。 请点击激活
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

4分41秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器


package exception; public class CheckingAccount extends Account { private double overdraftProtection; public CheckingAccount(double balance) { super(balance); } public CheckingAccount(double balance, double overdraftProtection) { super(balance); this.overdraftProtection = overdraftProtection; } public void withdraw(double amt) throws OverDraftException { if (amt > this.balance + overdraftProtection) { double deficit = amt - (this.balance + overdraftProtection); throw new OverDraftException("透支额度超标", deficit); } this.balance -= amt; } public static void main(String[] args) { //开户存了1000块,拥有500的透支额度 CheckingAccount a = new CheckingAccount(1000, 500); //存了1000 a.deposit(1000); //查询余额 System.out.println(a.getBalance()); try { a.withdraw(600); System.out.println(a.getBalance()); a.withdraw(600); System.out.println(a.getBalance()); a.withdraw(600); System.out.println(a.getBalance()); a.withdraw(600); System.out.println(a.getBalance()); a.withdraw(600); System.out.println(a.getBalance()); } catch (OverDraftException e) { System.err.println("透支超额:"+e.getDeficit()); e.printStackTrace(); } } }


HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。


问答区域    
2021-09-04 答: 练习1,练习2
老油头




答: 练习1,练习2
------------------------练习1:Account ---------------------------
public class Account {
    /**
     * 余额
     */
    private double balance;

    public double getBalance() {
        System.out.println("当前余额为:" + balance);
        return balance;
    }

    public void deposit(double money) {
        balance += money;
        System.out.println("存款成功,余额为:" + balance);
    }

    public void withdraw(double money) throws OverdraftException {
        if ((balance - money) >= 0) {
            balance -= money;
            System.out.println("取款成功,余额为: " + balance);
        } else {
            balance -= money;
            //透支金额
            double deficit = balance;
            throw new OverdraftException("余额不足,取款失败!\n超支金额:" + deficit);
        }
    }

    static class OverdraftException extends Exception {
        public OverdraftException(String msg) {
            super(msg);
        }
    }

    public static void main(String[] args) {
        Account account = new Account();
        account.deposit(651.50);
        account.getBalance();
        try {
            account.withdraw(661);
        } catch (OverdraftException e) {
            e.printStackTrace();
        }
    }
}

------------------------练习2 :overdraftProtection---------------------------

public class CheckingAccount extends Account {
    public void setOverdraftProtection(double overdraftProtection) {
        this.overdraftProtection = overdraftProtection;
    }

    public double getOverdraftProtection() {
        System.out.println("可用透支额度为: " + overdraftProtection);
        return overdraftProtection;
    }

    /**
     * 透支额度
     */
    private double overdraftProtection;



    @Override
    public void withdraw(double money) throws OverdraftException {
        double balance = getBalance();
        double overBalance = getOverdraftProtection();
        if ((balance - money) >= 0){
            balance -= money;
            System.out.println("取款成功,余额为: " + balance);
        } else if (((balance + overBalance) - money) >=0){
            balance -= money;
            overBalance += balance;
            System.out.println("取款成功,余额为: " + balance + "; " +
                    "\n剩余透支额度为:" + overBalance
                    );
        } else {
            balance += overBalance;
            balance -= money;
            //透支金额
            throw new OverdraftException("余额不足,取款失败!\n 超支金额:" + balance);
        }
    }

    public static void main(String[] args) {
        CheckingAccount checkingAccount = new CheckingAccount();
        checkingAccount.deposit(1988.50);
        checkingAccount.setOverdraftProtection(100);
        try {
            checkingAccount.withdraw(3000);
        } catch (OverdraftException e) {
            e.printStackTrace();
        }
    }
}

							





回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2021-05-23 练习-异常综合
莫諾




Account类: 银行账号 属性: balance余额 方法: getBalance()获取余额 方法: deposit() 存钱 方法: withdraw() 取钱 OverdraftException: 透支异常,继承Exception 属性: deficit 透支额
加载中
public class Account {
	protected static double balance = 0.0d;
	protected double init;
	
	public Account(double init) {
		this.init = init;
	}
	
	public Account() {
		// TODO 自动生成的构造函数存根
	}

	static Account x = new Account();
	
	public static double getBalance() throws overdraftException {
		if(balance < 0) 
			throw x.new overdraftException("透支异常", balance);
		return balance;
	}
	
	public static void deposit(double amt) {
		balance = balance + amt;
	}
	
	public static void withdraw(double amt) {
		balance = balance - amt;
	}
	
	public static void main(String[] args) {
		try {
			deposit(325.50);
			withdraw(415.50);
			getBalance(); 
		} catch (overdraftException e){
			e.printStackTrace();
			System.out.println(e.getMessage() +"	" + e.getDeficit());
		}	
	}
	
	class overdraftException extends Exception {
		String message;
		double deficit;
		
		public overdraftException() {
			
		}
		
		public overdraftException(String msg) {
			super(msg);
			message = msg;
		}
		
		public overdraftException(String message, double deficit) {
			this.message = message;
			this.deficit = deficit;
		}
		
		public String getMessage() {
			return message;
		}
		
		public double getDeficit() {
			return deficit;
		}
	}
}

							


3 个答案

Ayuaa
答案时间:2021-08-17
package Vantage.practice1.Study6; //这是一个类图 //Account类: 银行账号 //属性: balance 余额 //方法: getBalance() 获取余额 //方法: deposit() 存钱 //方法: withdraw() 取钱 //OverdraftException: 透支异常,继承Exception //属性: deficit 透支额 class OverdraftException extends Exception{ public OverdraftException(){ } public OverdraftException(String msg){ super(msg); } } class Account{ private double balance = 0; public Account(double value){ balance = value; } public Account(){ } public double getBalance(){ return balance; } public void deposit(double value){ balance += value; } public void withdraw(double value) throws OverdraftException{ if(balance>=value) { balance -= value; } else throw new OverdraftException("余额不足"); } } public class MyClass { public static void main(String[] args) { var one = new Account(); one.deposit(200); try { one.withdraw(300); } catch (OverdraftException e) { System.out.println("no"); System.out.println(e.getMessage()); e.printStackTrace(); } } }

从前不是少年
答案时间:2021-08-15
我这是超出正常额度抛出错误计算出异常透支 楼上double deficit = CheakingAcount();没有理解

aaadddsss
答案时间:2021-06-15
两道题试试看,万一对的呢?



回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2021-04-14 关于msg和e.printStackTrace。
2021-04-09 两道题 答案
2021-03-05 第二题,如果我余额1000,透支额1000,取出来1500,那余额还能是负的吗。666


提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 27 条以前的提问,请 点击查看

提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
关于 JAVA 中级-异常处理-综合练习 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 496725845
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: https://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图