当前课程知识点:Java程序设计 > 第二章 类与对象 > 2.5-应用举例 > 2.5-应用举例
大家好
欢迎继续学习
Java语言程序设计
这一节我们来
一起看一个应用实例
在这一节呢
我要通过一个
银行帐户类的实例
给大家复习和演示一下
在这一章我们学到的语法
首先我们来看一下
在前面例题中
我们已经设计好的
这个初步的银行帐户类
这就是这个基本的银行帐户类
Bank Account类
我们看到在这个类里面
声明了有包括类的属性
状态 构造方法
还有get方法和set方法
那我们来看这个构造方法呢
有不的重载形式
这都是我们前面例题中
看到过的
然后对于这些私有的属性呢
相应的都提供了
get方法和set方法
这里呢是一个简单的测试程序
在这个测试方法中呢
我们构造一个
银行帐户类的对象
然后呢 尝试调用它的
一些set方法和get方法
我们看到的测试结果呢
如我们预期的结果是一样的
好 接下来呢
我们要对这个银行帐户类呢
进行一系列的修改和测试
首先呢
我们来对这个银行帐户类
进行一些修改
我们要覆盖tu String()方法
然后呢
要声明存取款方法
要使用Decimal Format类
对于输出的数据类型
进行格式化
还要声明类方法
用它来声明特殊的实例
我们还要在这个类里边
声明类变量
也就是属于整个类的所有对象
所共享的变量
这是我们将对银行帐户类
进行的修改
首先我们来看
这个to String()方法
我们需要将对象的内容
转换成字符串
也就是说我们在这儿看到的
这两种输出方式呢
它应该是等效的
我们可以直接
将一个银行帐户类的对象
放在println方法的参数里面
作为实参
或者去调用to String()
进行转换以后把它作为实参
这两种实际上是等价的
为什么呢
因为在每个类中
默认都有一个
to String()方法
当我们在上下文中
需要一个字符串
String类型对象的时候
如果我们给它了
一个类的对象
那么这个类的
to String()方法
就会自动被调用
将这个对象转化成 String类型
但是呢
在前面的简单例子中
我们也到了
继承而的这个天然的
to String()方法呢
不是那么有用
这个时候呢
我们需要自己来覆盖
这个to String()方法
那么覆盖的时候
要注意什么问题呢
首先必须生命为public类型
返回值必须是String
方法的名称必须是to String
而且不能有参数
还有一点很重要
就是在方法体中
不要使用输出方法
不要使用这个println方法
下面呢
我们就一起来看一下
在改进的银行帐户类中
我们是怎样
覆盖to String()方法的
现在我们就来看
在Bank Account类中呢
怎么覆盖
这个to String()方法
由于从(英文)这个类
继承过来的
这个to String()方法
它输出的信息
转换的信息呢
对我们来说没有什么意义
所以我们现在在这个类中
自己来重写一下
也就是覆盖一下
这个to String()方法
使得将这个类的对象
转换成字符串的时候
能够输出帐号
还有呢
它的余额
所以我们在这儿呢
就将我们需要
转换成需要显现的这些信息
拼接成一个字符串
作为这个to String()方法的
执行结果返回
这样修改以后呢
我们再重新编一个
Bank Account类
然后呢
我们依然运行
前面的那个测试程序
这个时候呢
我们看到测试结果
这个帐户的信息输出来呢
就有意义了
是我们帐户里面
各个项的真实信息
它的帐号 它的余额
那么下一个问题呢
我们来考虑一下
这个银行帐户中的存款余额
我们知道一般来说呢
什么会引起余额变动
存取款操作
会引起帐户的余额变动对吧
所以这个余额
应该不能够人为去设置的
那么接下来呢
我们就在这个银行帐户类中
添加存取款方法
通过存取款来变动余额
这里呢
是我们新增的
存款方法和取款方法
在这个Bank Account
也就是帐户类中呢
应该是由存款方法来增加余额
由取款方法来减少余额的
而不应该是直接去设置余额
所以我们看这个deposit方法呢
就是存款方法
参数呢是存款数额
这次存多少钱
那就按照这个参数的存款数额呢
向这个balance
余额上累加
累加完了以后
这不就余额变动了吗
然后呢将这个余额返回
作为这个方法的返回值
同样呢
取款方法也是这样的
这次要取款多少
这是一个取款数额
我们将这个取款数额呢
从这个余额上减掉
然后呢
把取款数额呢返回
当然这儿呢
其实应该
大家回去再修改一下
把它做得更完备一些
然后先判断一下
它余额够不够
你要求的取款数额
如果不够呢
应该就取不了这么多钱的
这个呢
大家可以在这个基础上
自己把这个判断条件呢
完善一下
现在呢
我们在测试程序中
测试一下这个存取款的功能
我们看到构造好帐户对象以后
把它的一些基础数据设置好
并且呢先输出一下
帐户信息看一下
接下来呢
我们又再构造一个
另一个帐户信息
也是把帐户信息输出看一下
接下来我们就来尝试
存款和取款了
那我们先存一个数额
再存一个
接下来呢
输出一下当时帐户的状态
就是经过存款以后
这个帐号下的
它的余额
然后接下来呢
再做一个取款
在取款之后
再输出一下这个帐户的信息
我们来看
这个余额呢
确实是变动了
所以我们靠
这个存款和取款操作呢
来变动了余额
如果我们希望对输出的数据
进行格式化
希望它有一个很漂亮的格式
这个时候我们可以用
Java.text这个包里面的
DecimalFormat类
来对输出的数据进行格式化
DecimalFormat类呢
是在Java.text包里面
如果说我们
在to String()方法中
想对输出数据进行格式化的话
我们就可以使用
DecimalFormat类的
实例方法format
现在呢
我们进一步
在这个to String()方法中呢
再做一点修改
我们给输出的信息呢
设置一下格式
我们希望在输出
这个金额的时候呢
设置一个比较
大家看的舒服的
比较习惯的这样的格式
那么当我们需要
设置格式的时候呢
可以使用这个
DecimalFormat类的功能
调用这个类里面的format方法
在前面呢
构造这个
DecimalFormat对象的时候呢
就将这个
我们希望的格式信息
作为参数给到它
然后呢调用format方法
将我们希望输出的数据
这个balance余额
放在这儿做参数
这样我们看到
这个输出的格式呢
就按照我们规定的格式来了
那么DecimalFormat
这个类里面的更多的功能
更多的格式呢
大家如果感兴趣
可以自己去看一下
这个(API)的稳当
在这儿呢
这个例子仅仅是提示大家一下
DecimalFormat类
可以用来设置输出信息的格式
那么详细内容呢
就没有时间多讲了
只举这一个例子
试想一下
有的时候我们可能
需要在系统中
生成一些比较特殊的样例帐户
那么这个时候呢
我们可以在类中
定一些静态方法
或者说属于类的方法
让这些方法
为我们来生成特殊的帐户实例
现在我们看一下这个类怎么样
提供生成样例帐户对象的功能
假设我们希望
生成三个不同的样例帐户
那我们就可以在类里面
写三个静态的方法
我们看到example1 example2
还有呢这个
empty Account Example
这个empty Account Example
生成的是一个空的
没有余额的这样一个帐户
看这个example1生成的帐户呢
它有帐户的名字
有帐号 然后呢
进行了一次存款操作
存了1000
那么这个example2呢
也是它设置了这个名字
还有帐号
进行了两次存款操作
改变了它的余额
那么这个
empty Account Example呢
只是生成了一个帐户
然后设置它的名字和帐号
但是呢
没有进行存款操作
通常我们在银行中
去开了一个新帐户的时候呢
就会有一个帐号被自动生成
这个帐号一般来说
是按照某种规则去生成的
而不是说
我们随意输入一些数字
或字符去人为指定的
那这一般
是一个常识性的问题
大家都知道
那么在我们系统中呢
目前还是采用什么办法呢
是采用我们
硬生生的去设置一个帐号的
这样的办法
显然这个办法不好
那么接下来呢
我们要对这个银行帐户类呢
进行修改
要修改它的构造方法
让这个构造方法
在初始化一个帐户对象的时候
能够自动给它一个帐号
那么这里呢
我们采用一个比较简单的规则
就用这个对象的序号
作为自动的帐号
接下来我们来看
在程序中进行怎么样的修改
可以达到这一点
我们要做的修改呢
首先就是修改构造方法
取消构造方法
参数列表中的那个帐号参数
帐号不是由你指定的参数
去初始化的
那么另外呢
就不允许直接修改帐号
所以要取消
set Account Number
这个方法
那我刚才说了
我们采用的简单规则呢
就是用这个对象的序号
来代表帐号
这个时候我们就需要
增加一个类变量
对对象进行计数
初始值是零
每生成一个新的
BankAccount对象
那么它的帐号就自动设置为
LAST ACCOUNT NUMBER
它的值加1
同时呢
这个LAST ACCOUNT NUMBER
要被更新成新的值
那么这样情况下呢
我们就可以实现自动生成帐号
按照规则自动生成
规则呢虽然比较简单
但是呢
它也是自动生成的
如果大家愿意的话呢
去模仿现在的实际的银行
比如说你加上
你的银行(分支)机构的代码
加上其它的代码
那么最后是一种序号
道理其实都是一样的
除此而外呢
我们接下来还要做一个修改
就是要取消
set Balance的方法
我们有了存取款的方法了
还要通过存取款来改变余额
那么随意设置余额
显然是不科学的
所以set Balance方法呢
也要被取消
好 下面呢
我们就来看一下
修改以后的完整的银行帐户类
以及对这个类的测试代码
看看这个完整的程序
这里我们看到的
就是这个修改以后的
这个完整的新的帐户类
BankAccount2
我们看到这里面的
这个静态成员
LAST ACCOUNT NUMBER
这就是用来生成帐户的
帐号的这个基数
(初启)的时候呢 是零
然后呢每增加一个帐户呢
它自己会增一
作为新帐户的帐号
还有呢
在这个构造方法中
都少了一个参数
就没有这个帐号参数了
因为帐号是不应该直接
去编一个数去设置的
应该是根据这个累计的数
LAST ACCOUNT NUMBER
去每次加1生成帐号的
另外呢
我们看到也就没有
设置帐号的方法了
那么还有设置余额的方法呢
也相应的取消了
我们看到这些方法呢
只有一个ownerName
设置帐户名
然后另外有几个get方法
那这个取得帐号
取得帐户名和取得余额
这几个方法是有的
然后to String方法
使我们将这个帐号
还有呢余额
都作为一个整个字符串
拼接起来作为返回值
这里它的格式呢
我们用了DecimalFormat
这个类的功能
用它的format方法
来设置了它的表现格式
另外呢
我们看了这个新增的
存款方法deposit
还有取款方法withdrawl
用两个方法呢
来改变余额
而不是设置余额了
还有呢
这儿我们刚才看到的例子中的
三个静态方法
example1 example2
还有empty Account Example
这都是用来生成
样例帐户的方法
也都在这里面
这是刚才前面我们讲到的
几个修改的地方呢
都集中修改在
这第二个版本的帐户类里面了
接下来呢
我们就通过这个测试程序
测试一下新的帐户类对象
我们看到呢 构造这个
这个地方呢
example1 example2
就是来构造样例帐户
我们这儿构造了
几个不同的样例帐户
然后呢 去设置它的帐户名
去进行存款操作
然后输出帐户的状态
那直接将这个对象名
放在println里面输出呢
就使得系统自动调用了
to String()
将对象转换成字符串
我们看这个输出的格式呢
使我们通过这个
DecimalFormat类的
format的方法
进行格式化以后的这个结果
我们看到这个帐号
还有这个余额都是我们
按照我们规定的格式
输出的数字
在这一节呢
我们以银行帐户类为例
体验和复习了
我们在这一章中
学过的这些语法
好我们这一节的内容就是这些
-1.0-导学
--1.0-导学
-1.1-Java与面向对象程序设计简介
--第一章 Java语言基础知识--1.1-Java与面向对象程序设计简介
-1.2-基本数据类型与表达式
-第一章 Java语言基础知识--1.2-基本数据类型与表达式
-1.3-数组
--1.3.1-数组
-第一章 Java语言基础知识--1.3-数组
-1.4-算法的流程控制
--第一章 Java语言基础知识--1.4-算法的流程控制
-1.5-第一章小结
-第一章编程练习题
-课件
--外部链接
-Java环境配置、Eclipse使用、Helloworld程序详解
--使用eclipse建立Java项目、编写和运行Java程序
-Java数据类型
--Java整数类型
--Java浮点类型
--数据类型实战
--数据类型转换
--Java强制类型转换精度损失示例与表达式中的数据类型转换
-Java数组
-Java变量
--Java的变量
-命令行参数
--命令行参数的介绍
-2.0-导学
--2.0-导学
-2.1-面向对象方法的特性
--第二章 类与对象--2.1-面向对象方法的特性
-2.2-1-类声明与对象创建
--第二章 类与对象--2.2-1-类声明与对象创建
-2.2-2-数据成员
--第二章 类与对象--2.2-2-数据成员
-2.2-3-方法成员
--第二章 类与对象--2.2-3-方法成员
-2.2-4-包
--2.2-4-包
--第二章 类与对象--2.2-4-包
-2.2-5-类的访问权限控制
--第二章 类与对象--2.2-5-类的访问权限控制
-2.3-1-对象初始化
--第二章 类与对象--2.3-1-对象初始化
-2.3-2-内存回收
--第二章 类与对象--2.3-2-内存回收
-2.4-枚举类
--2.4-枚举类
--第二章 类与对象--2.4-枚举类
-2.5-应用举例
--2.5-应用举例
-2.6-第2章小结
-第二章编程练习题
-课件
--第二章课件
-3.0-导学
--3.0-导学
-3.1.1-3.1.2-类继承的概念和语法
--第三章 类的重用--3.1.1-3.1.2-类继承的概念和语法
-3.1.3-隐藏和覆盖
--第三章 类的重用--3.1.3-隐藏和覆盖
-3.2-Object 类
--第三章 类的重用--3.2-Object 类
-3.3-终结类与终结方法
--第三章 类的重用--3.3-终结类与终结方法
-3.4-抽象类
--3.4-抽象类
--第三章 类的重用--3.4-抽象类
-3.5-泛型
--3.5-泛型
--第三章 类的重用--3.5-泛型
-3.6-类的组合
--3.6-类的组合
-3.7-小结
--3.7-小结
-第三章编程练习题
-课件
--课件
-4.0-导学
--导学
-4.1-接口
--接口
--第四章 接口与多态--4.1-接口
-4.2.1-4.2.2-类型转换
--类型转换
--第四章 接口与多态--4.2.1-4.2.2-类型转换
-4.2.3-方法的查找
--方法的查找
--第四章 接口与多态--4.2.3-方法的查找
-4.3-多态的概念
--多态的概念
--第四章 接口与多态--4.3-多态的概念
-4.4-多态的应用举例
--多态的应用举例
--第四章 接口与多态--4.4-多态的应用举例
-4.5-构造方法与多态性
--构造方法和多态性
--第四章 接口与多态--4.5-构造方法与多态性
-4.6-本章小结
--本章小结
-第四章编程作业
-课件
--课件
-5.0-导学
--5.0-导学
-5.1.1-5.1.2-异常处理的概念
--第五章 输入输出--5.1.1-5.1.2-异常处理的概念
-5.1.3-5.1.5-异常的处理
--第五章 输入输出--5.1.3-5.1.5-异常的处理
-5.2-输入输出流的概念
--输入输出流的概念
--第五章 输入输出--5.2-输入输出流的概念
-5.3.1-写文本文件
--写文本文件
--第五章 输入输出--5.3.1-写文本文件
-5.3.2-读文本文件
--读文本文件
--第五章 输入输出--5.3.2-读文本文件
-5.3.3-写二进制文件
--写二进制文件
--第五章 输入输出--5.3.3-写二进制文件
-5.3.4-读二进制文件
--读二进制文件
-5.3.5-File类
--File类
-5.3.6-处理压缩文件
--处理压缩文件
-5.3.7-对象序列化
--对象序列化
-5.3.8-随机文件读写
--随机文件读写
-5.4-本章小结
--本章小结
-课件
--课件
-6.0-导学
--导学
-6.1-Java集合框架介绍
--第六章 对象群体的组织--6.1-Java集合框架介绍
-6.2-主要接口及常用的实现类
--第六章 对象群体的组织--6.2-主要接口及常用的实现类
-6.3-常用算法
--常用算法
-6.4-数组实用方法
-6.5-基于动态数组的类型(Vector, ArrayList)
--基于动态数组的类型(Vector, ArrayList)
-6.6-遍历Collection
-6.7-Map接口及其实现
-6.8-第6章小结
--第6章小结
-课件
--课件
-7.0-导学
--导学
-7.1-绘图
--绘图
-7.2-Swing基础
--Swing基础
-7.3-Swing的层次
--Swing的层次
-7.4-布局管理
--布局管理
-7.5-内部类
--内部类
-7.6-事件处理的基本概念
-7.7-事件派发机制
--事件派发机制
-7.8-顶层容器
--7.8-顶层容器
-7.9-中间层容器(一)
-7.10-中间层容器(二)
-7.11-原子组件(一)
-7.12-原子组件(二)
-7.13-原子组件(三)
-7.14-其它Swing特性
-7.15-第7章小结
-课件
--课件