java复习第三天

1、面向对象的思想
anything is an Object(万物皆对象)
符合人们客观看待世界的规律

2、抽象,从对具体的对象中抽取有用信息。
对象有其固有属性,对象的方法,即对象的行为(对象能做什么)
对象本身是简单的(功能简单),多个对象可以组成复杂的系统(对象之间彼此调用对方的方法)

3、面向对象的优点
1)对象应当是各司其职(功能简单),各尽所能(把自己的功能作到最好)。(弱耦合性实现了前面所述的对象的特点)
2)对象的耦合性,是对象之间的联系,对象和系统之间的联系。
对象的耦合性要尽量的弱,也就是对象之间的联系尽可能的弱,对象和系统之间的联系尽可能的弱。
弱耦合性要通过一个标准来实现
3)可重用性
对象的功能越简单,复用性就越好。(对象的耦合性弱,复用性就比较强)
4)可扩展性
系统的可插入性,是在系统中加入新的对象之后的系统稳定性。
对象的可替换性,是在系统中替换原有的对象之后的系统的稳定性。

4、面向过程和面向对象的比较
面向过程是先有算法,后又数据结构 --- (怎么解决问题)
面向对象是先有对象(数据结构),后有算法(对象间的方法调用) --- (用什么做)

5、类的定义
1)属性
类型 变量名; --> 实例变量,系统赋初始值
默认值 使用范围 命名冲突
实例变量 系统赋初始值 在类的内部使用 允许实例变量和局部变量发生命名冲突,变量的值->局部优先
局部变量 先赋值后使用 定义他的代码块 同范围内不允许两个局部变量发生命名冲突

2)方法的定义:
不允许方法的声明和实现分开
方法声明的组成:
(a)方法的修饰符(0或多个修饰符出现的顺序无关) |
(b)方法的返回值类型 |顺
(c)方法名 |序
(d)方法的参数表 |向
(e)方法中允许抛出的异常 |下
V
6、方法的重载
java中方法的重载(overload)方法名相同,参数表不同(个数,类型,排列顺序),其他部分可以不同。
调用时要给出明确参数并确定调用某一方法。在编译时,编译器会根据参数选择适当的方法,所以重载也叫编译时多态。
** 方法的重载可以屏蔽一个对象同一类方法由于参数不同所造成的差异 **

向上就近匹配原则
如果方法的参数表中的数据类型和调用时给出的参数类型不尽相同时会根据向上匹配的就近原则。(类型就近向上转化匹配)

public void m(byte a,short b){
System.out.println("m(byte,short)");
}

public void m(short a,byte b){
System.out.println("m(short,byte)");
}
此时若用2个byte作为参数调用m()方法,编译会出错,因为按照向上就近匹配原则,提升哪个都可以,出现语义不明确的错误

7、构造方法
1)方法名与类名相同,无返回值
2)系统提供默认无参的,空的构造方法
3)若自定义一个有参的构造方法,则系统将不提供无参的,空的构造方法
不能手工调用,在一个对象的生命周期中,只会被调用一次

8、对象的创建
Java在堆中创建对象的过程:
1)分配空间
2)初始化属性,若声明实例变量的时候没有初始化,用默认值初始化属性
3)调用某个构造方法(前提:不考虑继承关系)

Student s; //声明一个Student类的对象变量
s = new Student(); //调用Student类的无参的构造方法,创建一个对象,把这个对象的地址赋给一个Student类的引用
(引用指向了这个对象,引用中保存对象的首地址,以后都是通过引用访问这个对象的属性和方法)

s.age s引用所指向的对象的age属性

9、变量
包括简单变量(原始数据类型),对象变量。
简单变量传值,对象变量传址!

static void method3(Student s){
s=new Student(); //创建一个新对象,把对象的地址赋给形参的引用
s.age=20; //改变新对象的状态
}

Student stu=new Student();
System.out.println(stu.age); // 打印出Student类的age属性的初始值
method3(stu); //method3方法返回,形参s指向的被改变的对象已经成为了垃圾对象
System.out.println(stu.age); //打印的仍是原来那个对象的age的值

10、this
是一个引用,指向的是自己,即当前对象(哪个对象调用了方法,哪个对象就是当前对象)
可以用来区分实例变量和局部变量。this.age = age ;
this(),他表示调用本类其他的构造方法,注,只能写在构造方法的第一行。


项目练习:
项目名称:Bank Account Management System 银行账户管理系统 简称BAM
项目描述:这是一个基于C/S结构的银行账户在线管理系统,用户可以通过ATM终端界面来操作自己的银行账户.
项目实施方式:这是一个同步练习,随着达内CoreJava课程的深入,这个项目将趋于完整,学员的任务是随着知识点的深入,完成每一个进阶的项目要求.

练习1:
(面向对象基础语法)
写一个账户类(Account)

属性:
id:账户号码 长整数
password:账户密码 String
name:真实姓名 String
personId:身份证号码 String
email:客户的电子邮箱 String
balance:账户余额 double

方法:
deposit: 存款方法,参数是double型的金额
withdraw:取款方法,参数是double型的金额

构造方法:
有参和无参,有参构造方法用于设置必要的属性
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
项目名称:Bank Account Management System 银行账户管理系统 简称BAM 项目描述:这是一个基于C/S结构的银行账户在线管理系统,用户可以通过ATM终端界面来操作自己的银行账户. 项目实施方式:这是一个同步练习,随着达内CoreJava课程的深入,这个项目将趋于完整,学员的任务是随着知识点的深入,完成每一个进阶的项目要求. 项目一 练习1:(面向对象基础语法) 写一个账户类(Account),属性: id:账户号码 长整数 password:账户密码 name:真实姓名 personId:身份证号码 字符串类型 email:客户的电子邮箱 balance:账户余额 方法: deposit: 存款方法,参数是double型的金额 withdraw:取款方法,参数是double型的金额 构造方法: 有参和无参,有参构造方法用于设置必要的属性 练习2:(封装) 将Account类作成完全封装,注意:要辨别每个属性的set/get方法是否需要公开 练习3:(继承,多态) 银行的客户分为两类,储蓄账户(SavingAccount)和信用账户(CreditAccount),区别在于储蓄账户不允许透支,而信用账户可以透支,并允许用户设置自己的透支额度. 注意:CreditAccount需要多一个属性 ceiling 透支额度 为这两种用户编写相关的类 同时要求编写Bank类,属性: 1.当前所有的账户对象的集合,存放在数组中 2.当前账户数量 方法: 1.用户开户,需要的参数:id,密码,密码确认,姓名,身份证号码,邮箱,账户类型(int),返回新创建的Account对象 2.用户登录,参数:id,密码 返回Account对象,提示 用s1.equals(s2)判断s1和s2两个字符串内容是否相等 3.用户存款,参数:id,存款数额,返回修改过的Account对象 4.用户取款,参数:id,取款数额,返回修改过的Account对象 5.设置透支额度 参数:id,新的额度 ,返回修改过的Account对象.这个方法需要验证账户是否是信用账户 用户会通过调用Bank对象以上的方法来操作自己的账户,请分析各个方法需要的参数 另外,请为Bank类添加几个统计方法 1.统计银行所有账户余额总数 2.统计所有信用账户透支额度总数 写个主方法测试你写的类 项目二 练习4:(语言高级特性,三个修饰符) 1.修改Account类,银行用户的账号(id)是自动生成的,初始值为100000,第一个开户的用户id为100001,第二个为100002,依此类推. 提示:构造对象的时候采用static属性为id赋值 2.对于Account类,有两个方法,存款方法和取款方法,请修改这两个方法. 存款方法改为不允许子类修改 取款方法根据不同的子类而不同,因此,改为抽象方法,在两个子类中分别实现 3.将Bank类作成单例 项目三 练习5:(接口) 为SavingAccount和CreditAccount各自添加一个子类 LoanSavingAccount类:用户可以贷款,不可以透支 LoanCreditAccount类:用户可以贷款,可以透支 说明:贷款和透支是不一样的,透支指的是账户余额小于0,而贷款用户需要一个贷款额的属性. 在ATM机上,用户可以选择贷款,也可以选择还贷款,而还贷款就是要把账户余额上的资金转到贷款额上 例如:用户余额10000元,贷款额100000元,用户可以选择还款5000元,则用户余额变为5000,贷款额变为95000元. 利用接口来抽象出LoanSavingAccount类和LoanCreditAccount类的共性 接口中的方法: requestLoan:贷款 payLoan:还贷 getLoan:获取用户贷款总额 为Bank类添加三个方法, 贷款:参数 id,贷款额,返回修改过的Account对象 还贷款:参数 id,还款额,返回修改过的Account对象 统计所有账户贷款的总数 练习6:(Object) 为Account类及其子类添加toString方法和equals方法 项目四 练习7:(Exception) 为BAM添加几个异常类 BalanceNotEnoughException :用于取钱的时候余额不足的情况(包括账户余额超过透支额的情况) RegisterException:用于开户异常的情况,例如密码两次输入不一致等情况 LoginException:用户登录异常的情况,例如id错误,密码错误 LoanException:贷款额不能为负数,如果用户试图将贷款额置为负数,则会抛出这个异常 以上四个异常类有一个共同的父类 BusinessException 并妥善的处理这些异常 项目五 练习8:(集合) 改写Bank类,采用集合的方式来管理多个Account对象 为Bank类添加一个方法 打印所有用户的总资产排名 说明:一个用户可能会有多个账号,以身份证号为准.总资产指多个账户余额的总和,不需要考虑贷款账户的贷款额 项目六 练习9:(GUI) 为BAM添加用户界面 需要以下几个类: BAMClient 其中会包含一个Frame,这是用户主界面 MainPanel:主界面,用户可以选择开户或者登录 RegisterPanel:用户开户具体用到的界面 LoginPanel:用户登录需要的界面 BusinessPanel:界面上会显示账户的功能 至少包括存款和取款,对于可透支的用户,还允许用户修改透支额度,对于贷款用户,还允许用户贷款和还贷款 注:本练习的界面布局不做要求,请阅读现有代码,添加事件处理代码 提示:在开户或者登录之后都会跳到BusinessPanel,而用户点击了交易之后,界面停留在BusinessPanel 要随时注意在BusinessPanel上根据数据的变化更新显示信息 项目七 在该加资源保护的地方加上,没有标准 项目八 练习10:(I/O) 修改Bank类,账户信息会采用对象序列化的方式存放在文件中.当Bank对象生成的时候会读取文件,设置账户集合.当账户信息改变的时候,会随时更新文件 设计一个FileDAO类(文件数据访问对象),负责对文件的访问,包括存放账户,提取账户等方法,在Bank类中,会通过FileDAO对象来访问文件 注意:如果已有的账户对象会存在文件中,那么为新的账户对象分配id的做法也应相应的改变,过去的用static属性的做法不再合适,应该改为,把下一个可用的id存放在一个文件中,每创建一个新对象的时候都会读取这个文件,获得新对象的id,并且修改文件中的id,使其加1.这个工作可以放在Account类的构造方法中 项目九 练习11:(网络) 在现有的BAM中,用户是通过界面直接访问Bank对象的,将其改为C/S结构,由界面充当客户端,通过TCP协议访问服务器端的Bank对象. 提示:客户端和服务器端需要通过对象来传递信息,这里会使用对象序列化技术.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值