0

0

在Java中实现简易银行账户管理_Java面向对象实战说明

P粉602998670

P粉602998670

发布时间:2025-12-31 17:12:08

|

138人浏览过

|

来源于php中文网

原创

银行账户应封装为责任明确的实体,余额字段须private,仅通过deposit()和withdraw()校验后修改,构造方法拒绝负初始余额。

在java中实现简易银行账户管理_java面向对象实战说明

如何用 Java 类封装银行账户的核心行为

账户不是数据容器,而是有明确责任的实体。直接暴露 balance 字段或提供无校验的 setBalance() 方法,等于把取款机钥匙交给任意调用方。

  • 必须用 private 修饰余额字段,强制所有变更走业务方法
  • deposit(double amount)withdraw(double amount) 是唯二修改余额的入口,内部需校验金额正负、透支等逻辑
  • 构造方法应拒绝负初始余额,例如:
    public Account(String accountNumber, double initialBalance) {
        if (initialBalance < 0) {
            throw new IllegalArgumentException("Initial balance cannot be negative");
        }
        this.accountNumber = accountNumber;
        this.balance = initialBalance;
    }

为什么不能用 double 表示货金额

浮点数精度问题在金融场景下是致命的。比如 0.1 + 0.2 在 Java 中结果是 0.30000000000000004,不是数学意义上的 0.3

  • 必须使用 BigDecimal 存储和计算金额,且构造时用字符串(new BigDecimal("100.50")),避免 double 构造器引入误差
  • 所有加减乘除操作都调用 add()subtract()multiply()divide() 方法,并指定 RoundingMode
  • 显示输出前用 setScale(2, RoundingMode.HALF_UP) 统一保留两位小数

转账操作必须跨账户原子性处理

转账不是两个独立操作:A 减钱、B 加钱。中间若发生异常(如 A 扣款成功但 B 入账失败),会导致资金丢失或重复入账。

What-the-Diff
What-the-Diff

检查请求差异,自动生成更改描述

下载
  • 转账方法应定义在外部服务类(如 BankService)中,而非单个 Account 类内
  • 必须用同步块或显式锁控制并发,防止多线程同时对同一账户操作引发竞态条件
  • 推荐先校验双方账户有效性及余额充足性,再执行扣减与增加,任一环节失败则全部回滚(实际项目中需结合事务管理器,简易版可用布尔返回值+状态重置)

账户编号生成与唯一性保障的实操陷阱

Math.random() 或简单递增整数生成账号,在多实例或高并发下极易冲突。

立即学习Java免费学习笔记(深入)”;

  • 开发阶段可用 UUID.randomUUID().toString().replace("-", "").substring(0, 10) 快速生成伪唯一 ID
  • 生产环境必须依赖数据库主键自增、Snowflake 算法或分布式 ID 生成服务
  • 若用内存集合(如 Map<string account></string>)做账户仓库,添加新账户前必须检查 map.containsKey(accountNumber),否则覆盖已有账户
账户对象的边界意识比语法更重要——它不负责存储、不负责网络、不负责日志,只专注“钱怎么动”这一件事。很多初学者写的账户类最后塞进了读文件、连数据库、打印报表的代码,本质上已经不是账户,而是一个失控的上帝类。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
什么是分布式
什么是分布式

分布式是一种计算和数据处理的方式,将计算任务或数据分散到多个计算机或节点中进行处理。本专题为大家提供分布式相关的文章、下载、课程内容,供大家免费下载体验。

405

2023.08.11

分布式和微服务的区别
分布式和微服务的区别

分布式和微服务的区别在定义和概念、设计思想、粒度和复杂性、服务边界和自治性、技术栈和部署方式等。本专题为大家提供分布式和微服务相关的文章、下载、课程内容,供大家免费下载体验。

251

2023.10.07

go语言 面向对象
go语言 面向对象

本专题整合了go语言面向对象相关内容,阅读专题下面的文章了解更多详细内容。

58

2025.09.05

java面向对象
java面向对象

本专题整合了java面向对象相关内容,阅读专题下面的文章了解更多详细内容。

63

2025.11.27

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

760

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

221

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1566

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

649

2023.11.24

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

3

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.3万人学习

C# 教程
C# 教程

共94课时 | 11.1万人学习

Java 教程
Java 教程

共578课时 | 80.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号