201521123055 《Java程序设计》第6周学习总结
1. 本章学习总结


2. 书面作业
Q1.代码阅读:Child压缩包内源代码
1.clone方法
1.1 Object对象中的clone方法是被protected修饰,在自定义的类中覆盖clone方法时需要注意什么?
1.2 自己设计类时,一般对什么样的方法使用protected进行修饰?以作业Shape为例说明。
1.3 在test1包中编写简单的Employee类,在test2包中新建一个TestProtected类,并在main中尝试调用test1包中的Employee的clone方法克隆一个新对象,能否成功?为什么?
答:
(1)首先贴上clone方法的源码描述:
protected native Object clone() throws CloneNotSupportedException;
projected关键字说明这是个被保护的方法,那么显然,这个方法只能被同包内的类和子类所访问;并且Object类内的clone方法并没有主体。因为所有类都是缺省继承Object类的,所以clone方法肯定是可以进行重写的,为了让重写后的clone方法可以被其他类调用,最好用public修饰clone方法。
下面以一个覆盖的clone方法为例:
public Object clone(){
Object o=null;
try {
o=super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return o;
}
编译发现报错,抛出 CloneNotSupportedException 异常,出现这个情况的原因是由于没有实现Cloneable接口(异常肯定会抛出,因为没有实现该接口所以导致这个异常没有“接住”,这个不细说),即:
public interface Cloneable {
}
Cloneable是标记接口,实现该接口的原因是为了给JVM提示,此类可以实现浅层复制的功能。
那么问题又来了,什么是浅层复制。关于这个问题,可以借助c++的指针来说明,如果两个指针指向同一地址,那么他们所指向的内容肯定相同,改动一个,另一个必然跟着变化,JAVA里由于没有指针的概念,很多人忘了引用与对象的区别。所以说浅层复制就是指创建一块区域存储复制体对象,实际上复制体与本体引用的是同一块内存区域。
有浅层复制自然肯定有深层复制,这里简单说一下,就是引用区块不同,于是乎深层复制需要用户自己重写,无非就是新建区域并赋值,这个就不展开了。
(2)根据protected所规定的访问范围,有些方法只想让同包的类和子类访问时采用protected修饰。以Shape为例,getPerimeter与getArea分别为计算面积与周长的方法,很明显只有继承了Shape的子类才具有这两种方法,因此可用protected修饰。
(3)首先,这俩类不在一个包内,也不是继承关系,不用测试也知道过不了。那么解决方法如下:
- 在test2包里加上import test1.Employee;
- 让TestProtected继承Employee类
Q2.使用匿名类与Lambda表达式改写题集面向对象2-进阶-多态接口内部类的题目5-2
答:
新建两个比较器:
Comparator<PersonSortable2> NameComparator=(o1,o2)-> o1.getName().compareTo(o2.getName());
Comparator<PersonSortable2> AgeComparator=(o1,o2)-> o1.getAge()-o2.getAge();
调用比较器:
Collections.sort(person,NameComparator);
Collections.sort(person,AgeComparator);
测试数据:
5
zhang 15
zhang 12
wang 14
Wang 17
li 17
运行结果:
NameComparator:sort
Wang-17
li-17
wang-14
zhang-15
zhang-12
AgeComparator:sort
zhang-12
wang-14
zhang-15
Wang-17
li-17
Q3.分析下列代码,回答shapeComparator所指向的对象与Comparator接口有什么关系?
Comparator<Shape> shapeComparator = new Comparator<Shape>() {
@Override
public int compare(Shape o1, Shape o2) {
//你的代码
}
};
答:其实就是用匿名内部类把compare进行重写,新建了一个比较器,那么这个shapeComparator类肯定是实现了Comparator接口的,并且可以通过Collection.sort进行调用。
Q4.GUI中的事件处理
4.1 写出事件处理模型中最重要的几个关键词。
4.2 使用代码与注释,证明你理解了事件处理模型。
答:
(1)事件处理三个部分:事件源—事件对象—事件监听器
(2)直接以购物图形化界面为例:
jb2=new JButton("加入购物车");
jb2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Commodity c=new Commodity(Integer.valueOf(jtx2.getText()),jtx3.getText(), Double.valueOf(jtx4.getText()));
shopcar.add(c);
}
});
这是处理鼠标按下按钮的事件,使用了匿名内部类处理事件。
吐槽一下,JAVA做图形化实在难看,不适合做桌面软件,极不推荐使用。
Q5.结对编程:面向对象设计
首先提一下,这只是粗略的界面,具体有的功能其实不难写,主要是加了太多控件真的丑。。就简化一下吧
界面设计:


本来是想写管理员账号的,后来感觉实现功能不多,就先不写了,这两个界面功能也很简单,看按钮名就只知道。
3. 码云提交记录
上周已做完这周PTA,检阅上周提交记录即可。
4.实验总结
本次实验主要体会是在于匿名内部类的使用,在对于一次性的方法或者是结合Lambda进行重写方法有了较好的掌握。在对于自定义接口方面,其实应用还是挺多的,比如标记接口什么的,接口相对于继承来说灵活的多,因此面向接口编程其实是很好的一种思想,多多掌握这方面的知识有利于对JAVA的理解。
201521123055 《Java程序设计》第6周学习总结的更多相关文章
- 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 ...
随机推荐
- HttpClient笔记与踩过的坑
本来有个指纹采集功能做了个winFrom小程序 在本地测试都还能行,后来快上线的时候发现 客户用的阿里云数据库, 不对外公布 ,然后发现本地采集的数据没办法上传到数据库怎么办呢? 然后曲线救国,用we ...
- 【原创】Superset在windows下的安装配置
Superset是由Airbnb(知名在线房屋短租公司)开源BI数据分析与可视化平台(曾用名Caravel.Panoramix),该工具主要特点是可自助分析.自定义仪表盘.分析结果可视化(导出).用户 ...
- ASP.NET Core - 关于标签帮助器您值得了解的五点
如果您开发过ASP.NET Core Web应用程序,您应该已经熟悉了标签帮助器.ASP.NET Core应用程序依赖标签帮助器来呈现表单和表单字段是很常见的.所以,一个视图通常包含许多标签帮助器以及 ...
- python伪装浏览器爬虫
待完善 import urllib2,urllib,cookielib urllib.getproxies_registry=lambda:{} request=urllib2.Request(&qu ...
- 曲线点抽稀算法-Python实现
何为抽稀 在处理矢量化数据时,记录中往往会有很多重复数据,对进一步数据处理带来诸多不便.多余的数据一方面浪费了较多的存储空间,另一方面造成所要表达的图形不光滑或不符合标准.因此要通过某种规则,在保证矢 ...
- easyUI datagrid 列宽自适应(简单 图解)(转)
响应数据格式: easyUI在html代码中结构: 发现了什么没有,我们的表头其实是一个td在td中有一个属性field那么我们就可以获得了; 以下就是自适应代码: //添加事件 function c ...
- Ubuntu与Centos在登陆安全方面的比较
Ubuntu在安装时创建的普通用户默认具有sudo权限,默认root没有设置密码,可以通过自建用户来执行sudo passwd 为root设置密码;Centos在安装时创建的普通用户默认没有sudo权 ...
- 【Linux】windows-linux、linux-linux文件互传
一.Linux下文件互传,scp命令实例 1.Linux下目录复制:本机->远程服务器 scp -r /home/abc/test1(本机目录路径) root@192.168.0.1:/hom ...
- Android SQLite 简易指北
Android SQLite SQLite一款开源的, 轻量级的数据库. 以文本文件的形式存储数据. SQLite支持所有标准的关系型数据库特性. SQLite运行时占用内存非常少(约250 KByt ...
- 解决VS2015中没有报表项(ReportViewer)的方法
作者:何时.微笑成了种奢求 VS2015中没有报表项(ReportViewer),怎么办?这篇文章主要为大家详细介绍了解决VS2015中没有报表项(ReportViewer)的方法,感兴趣的小伙伴们可 ...