《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 ...
随机推荐
- 分辨率验证工具 - 【Firesizer】的使用
Firesizer是一款测试分辨率的插件. 下载方式:Firefox工具栏——〉工具——〉附加组件--〉搜索Firesizer并安装,浏览器会自动重启 使用方式:浏览器右下角直接切换分辨率即可,如下图 ...
- RabbitMQ 使用(一)
RabbitMQ中的使用 这篇文章将会介绍关于RabbbitMQ的使用,并且使用的是kombo(客户端的Python实现)来实现: 安装 如果使用的是mac安装的话,可以先安装到指定的位置,接着配置命 ...
- Ubuntu 简单安装和配置 GitLab
使用的 Ubuntu Server 16.04 LTS 版本,服务器托管在 Azure 上,用的 1 元试用 1 个月服务器订阅(1500 元额度). 安装命令(推荐使用): curl -sS htt ...
- OpenStack(企业私有云)万里长征第六步——OpenStack网络及虚拟机存储位置
一.前言 昨天又装了一遍OpenStack.码农这项工作就如同人生,永远有你想不到的意外在等着你,时而是惊喜时而是悲伤.在装的过程中倒是很顺利,只是在安装完成之后碰到了两个之前没有碰到的问题,这里记录 ...
- Microsoft Visual C++ Package Server 已停止工作
使用vs2010时,有时会提示“Microsoft Visual C++ Package Server 已停止工作”,是否需要关闭程序或者调试程序. CPkgSrv 是关于Visual Studio ...
- (三)训练HMM模块
“(二)杂项准备"之后,我们就已经训练了一个hmm模型了——“hmm0”. 接下来,我们将以“hmm0”作为基础,一路训练到“hmm7". 1.从“hmm0"训练到&qu ...
- [翻译] C# 8.0 预览
原文: C# 8.0 Previewed 在一个Channel 9 的视频中,Mads Torgersen展示了C#8的首批四个新特性. 可空引用类型 过去我们报道过可空引用类型,简单地说,默认情况下 ...
- easyUI自带的时间插件日期选择、月份选择、时间选择的使用(转)
1.日期选择 只要将class设置成easyui-datebox就可以了,当然前提是已经应用了easyui的js <input type="text" class=" ...
- ArrayList和CopyOnWriteArrayList
这篇文章的目的如下: 了解一下ArrayList的增删改查实现原理 看看为什么说ArrayList查询快而增删慢? CopyOnWriteArrayList为什么并发安全且性能比Vector好 1. ...
- 你以为你真的会用编辑器----之Emacs
Emacs... -------------------------- EMACS,即Editor MACroS(编辑器宏)的缩写,Emacs,著名的集成开发环境和文本编辑器.Emacs被公认为是最受 ...