《Java程序设计》第5周学习总结
1. 本章学习总结
1.1 尝试使用思维导图总结有关多态与接口的知识点。

1.2 可选:使用常规方法总结其他上课内容。
2. 书面作业
1. 代码阅读:Child压缩包内源代码
1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误。并分析输出结果。
不能通过编译;
System.out.println(i);会出错;

- 出错原因:父类中i定义为private类型,所以父类的i对于子类来说是不可见的;
- 改正:将父类中i的访问权限改大一点,如protected;
- 输出结果及分析:
c.getParenti();调用public void getParenti()输出父类的i,结果为1,c.getParentj();调用public void getParentj()依次输出父类的j、父类的j、父类的i、父类的i,结果为2、2、1、1,Other.showParentj(p);调用public static void showParentj(Parent p)输出父类的j、父类的i,结果为2、1。

1.2 另外一个包中的OutOfParentPackage.java,能否编译通过?提示什么错误?分析原因。
- 不能通过编译;

- 原因:这里Parent类默认是包访问权限,OutOfParentPackage在Parent包之外,所以访问不到。
1.3 回答:如果为了访问到protected修饰的属性或方法应该怎么办?
- 被声明为protected的成员,相同包中的类可以直接存取,不同包的类可以在继承后的子类直接存取。
2. abstract进阶:阅读GuessGame抽象类的设计与使用源代码
2.1 Guess改造前代码很简单,而改造后的代码使用了抽象类、抽象方法看起来很复杂,那这样的改造到底有什么好处呢?
- 改造前,未使用抽象类,只能控制台输出;
- 改造后,使用抽象类,可以在控制台,也可以使用对话框图形界面等输入,即使取得用户输入、显示结果的环境未定,但猜数字的流程可以先操作。
2.2 如果想将该游戏改造成图形界面,应该进行一些什么操作?
- 继承已定义的abstract抽象类,设计一个图形界面猜数字的类。
2.3 结合该例子,你觉得什么时候应该使用abstract?
- 某方法区块中没有任何程序代码操作,可以使用abstract表示该方法为抽象方法;
- 根据不同需求编写程序,在某些要求未确定时可用abstract类,先完成可操作的流程,再针对新需求编写程序,这样原有程序无需修改,保持程序弹性和可维护性。
2.4 重要:在这个例子中,变化的是什么,不变的是什么?尝试结合abstract、继承等概念进行说明。
- 变化的是程序所可能运行的环境;
- 不变的是程序本身的框架,后续只需根据不同的需求添加不同的类即可。
3. Comparable与Comparator
3.1 描述Comparable接口的用途。为什么某个类实现了Comparable接口就可以直接使用Arrays.sort对其进行排序?
- 用途:对实现它的每个类的对象进行整体排序,任何实现Comparable接口的类,都必须实现该方法;
- 查询jdk文档,发现Arrays有一个方法
public static void sort(Object[] a)功能:根据元素的自然顺序对指定对象数组按升序进行排序, 数组中的所有元素都必须实现Comparable接口,Arrays.sort可以对所有实现了Comparable接口的对象进行排序,所有实现Comparable的对象都有一个共同的特性---可以被比较,具体体现在均拥有compareTo方法,即拥有共同的行为。

3.2 有了Comparable接口为什么还需要Comparator接口呢?
- Comparable接口只能按照一种规则排序,当需要对多个对象或类型排序时,就显得不够方便,而使用Comparator接口可以编写多个排序方式类实现Comparator接口,并重写新Comparator接口中的compare()方法,在调用Arrays的sort()时将排序类对象作为参数传入,可以按照多种方式排序。
3.3 可选:使用匿名内部类、Lambda表达式实现PTA编程5-2。
4. 面向接口案例分析,阅读Case-StudentDao.zip案例
4.1 画出类关系图,描述每个类与接口的作用。

- Student类:name属性,getter/setter和toString()方法;
- StudentDao接口:提供三个抽象方法,写入学生数据、读取学生数据和显示所有学生信息;
- StudentDaoArrayImpl类:用数组来存放学生信息,具体实现接口的三个抽象方法;
- StudenDaoListImpl类:用ArrayList来存放学生信息,具体实现接口的三个抽象方法。
4.2 StudenDaoListImpl与StudentDaoArrayImpl有何区别?
- StudenDaoListImpl用ArrayList储存对象,StudentDaoArrayImpl用数组储存对象。
5. 什么是面向接口编程?面向接口编程的好处是什么?
结合题目3与4中的Test.java的代码讨论分析。不要百度原封不动照搬!
- 首先,面向接口编程和面向对象编程并不是平级的,它并不是比面向对象编程更先进的一种独立的编程思想,而是附属于面向对象思想体系,属于其一部分。或者说,它是面向对象编程体系中的思想精髓之一。
- 在系统分析和架构中,分清层次和依赖关系,每个层次不是直接向其上层提供服务(即不是直接实例化在上层中),而是通过定义一组接口,仅向上层暴露其接口功能,上层对于下层仅仅是接口依赖,而不依赖具体类。
- 使用接口,首先对系统灵活性大有好处。当下层需要改变时,只要接口及接口功能不变,则上层不用做任何修改。甚至可以在不改动上层代码时将下层整个替换掉,另一个好处就是不同部件或层次的开发人员可以并行开工。
- 所谓面向接口编程,就是代码是与接口相关联的(比如Comparable接口),而不需要考虑具体的实现类,只要某个类(如Employee)实现了相关的接口(如Comparable),我们编写的面向接口(如Comparable)的代码就可以适用。
- 在题目3中,使用了
Comparable和Comparator两个接口,Comparable接口实现了对对象某一特征的比较,而Comparator接口则可以实现对对象多个特征的比较,而不用针对每个特征都单独写比较函数。根据题目的需求,共同的东西是排序算法,不同的东西,是排序中比较的条件。 - 在题目4中,
StudenDaoListImpl和StudentDaoArrayImpl都实现StudentDao接口,都可以用于储存学生信息,只是储存形式不同罢了。 - 在java中,继承会有“是一种”的关系,操作接口则表示“拥有行为”。使用接口,我认为可以更好的解决需求变化,不同的对象可能有不同的特征,不同的特征可能又会有这样那样的联系,在实际操作中要一一单独实现工作量太大,也会使程序显得累赘,要善于抓住共同的东西,我觉得接口就是这样一种“工具”,集合不同对象的共同之处集中操作。刚学程序时就说写程序要有弹性,要有可维护性,什么叫有弹性?何为可维护?需求总是无止境的,可能一会儿要加这个功能,一会儿又要区分那个功能,总不能每增加一个功能就重新设计一次程序吧。说到可维护,又想到工作效率的问题。如上面猜数字的题目,运行环境未定,有时候不能等别人完成任务的时候我们再去做,我们可以先把程序架构写好,把调用接口的上层同时写出来,再根据不同需求编写程序。
6. 结对编程:面向对象设计(大作业2-非常重要)
内容:使用Java代码完成上周做的面向对象设计大作业,需要有初步界面。实现的功能尽量简单,少而精,只包含必要的功能,不要追求高大全。
写出:类图(尽量精简,不用太多子类,两个即可)、系统常用功能描述、关键代码与界面
形式: 两人依托码云合作完成。请在这里贴出你们的学号、姓名与任务分工。
注意: 再过几次课要讲Java图形界面编程,到时候要将该系统升级为图形界面。系统的业务逻辑部分应该变化不大,变化大的是输入与输出部分。所以编码的时候,输入(Scanner)与输出(System.out)的代码,请不要将其与某个业务处理函数绑死。
选做加分: 给出两人在码云上同一项目的提交记录截图,额外加分。注:两个人在码云上新建一个项目。
6.1 提交作业的结构
| 学生A | 学生B | 项目地址 |
|---|---|---|
| http://www.cnblogs.com/ghnb/ | 没有队友 |
6.2 常用功能描述框架图

6.3 关键代码
6.4 运行界面
3. 使用码云管理Java代码

4. PTA实验总结
5-1
public int compareTo()函数里要注意不同的情况返回的是1还是-1;- PTA上提示答案错误而找不到错误时,可以多测试几组数据多对比一下,起先只测试了两组数据没有发现问题,显示答案错误,当一次输入五组数据时就发现错误了;
- 比较name值的大小应使用
compareTo函数。
5-2
if(o1.getName().compareTo(o2.getName())>0) return 1;这里需要用到get函数获取name的值,与5-1不同,age值得获取也是如此;Arrays.sort(person, new NameComparator());sort函数的调用应为此格式。- 注意花括号的对应,给一个花括号坑了好久。。。半天找不到错误也是罪了。。。
5-3
- 关于栈的知识需要再回顾一下。
5-4:
- 对内部类还不是很熟悉,还要再多看看书;
- 比较最大值最小值的方法还能不能改进;
- 注意输出格式
System.out.println(arr.findMinMax(array));,System.out.println(Arrays.toString(array));输出的是数组中的所有元素。
《Java程序设计》第5周学习总结的更多相关文章
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 20145213《Java程序设计》第一周学习总结
20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145330孙文馨 《Java程序设计》第一周学习总结
20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
- 20145337 《Java程序设计》第九周学习总结
20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...
- 20145337 《Java程序设计》第二周学习总结
20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...
- 20145218《Java程序设计》第一周学习总结
20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...
- 《Java程序设计》第九周学习总结
20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
- 《Java程序设计》第二周学习总结
20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...
随机推荐
- 关于socket通信bind()返回值错误:10049
这个问题,我差点和客户吵起来了.我的电脑确实没有问题,客户电脑却会经常出现,.今天查了下,居然是这种问题,大意了,在这里记录下. 服务器端程序开启的时候总是提示:bind错误,用WSAGetLastE ...
- Python 接口:从协议到抽象基类
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Helvetica } 抽象基类的常见用途:实现接口时作为超类使用.然后,说明抽象基类如何检查 ...
- Luogu P3390 【模板】矩阵快速幂
题目背景 矩阵快速幂 题目描述 给定n*n的矩阵A,求A^k 输入输出格式 输入格式: 第一行,n,k 第2至n+1行,每行n个数,第i+1行第j个数表示矩阵第i行第j列的元素 输出格式: 输出A^k ...
- 遇到local variable 'e' referenced before assignment这样的问题应该如何解决
问题:程序报错:local variable 'e' referenced before assignment 解决:遇到这样的问题,说明你在声明变量e之前就已经对其进行了调用,定位到错误的地方,对变 ...
- java核心技术卷一笔记(2)
---恢复内容开始--- 异常.断言 所有的异常都继承自Throwable类,异常包括已检查异常和未检查异常,应该抛出已检查异常,而未检查异常要么是不可控的(Error),要么是应该避免发生的(Run ...
- 设计模式(7)--Bridge(桥接模式)--结构型
1.模式定义: 桥接模式是对象的结构模式.又称为柄体(Handle and Body)模式或接口(Interface)模式.桥接模式的用意是“将抽象化(Abstraction)与实现化(Impleme ...
- 2017-4-25/设计缓存(LFU)
1. 恒定缓存性能有哪些因素? 命中率.缓存更新策略.缓存最大数据量. 命中率:指请求缓存次数和缓存返回正确结果次数的比例.比例越高,缓存的使用率越高,用来衡量缓存机智的好坏和效率.如果数据频繁更新, ...
- Android事件传递机制详解及最新源码分析——View篇
摘要: 版权声明:本文出自汪磊的博客,转载请务必注明出处. 对于安卓事件传递机制相信绝大部分开发者都听说过或者了解过,也是面试中最常问的问题之一.但是真正能从源码角度理解具体事件传递流程的相信并不多, ...
- SpringMVC参数绑定(从请求中接受参数)
参数绑定(从请求中接收参数) 1)默认类型: 在controller方法中可以有也可以没有,看自己需求随意添加. httpservletRqeust,httpServletResponse,httpS ...
- ZOJ 3811 Untrusted Patrol The 2014 ACM-ICPC Asia Mudanjiang Regional First Round
Description Edward is a rich man. He owns a large factory for health drink production. As a matter o ...