1. 本周学习总结

1.1 面向对象学习暂告一段落,请使用思维导图,以封装、继承、多态为核心概念画一张思维导图,对面向对象思想进行一个总结。

注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖面向对象的核心内容即可。

注2:颜色要少、连线不要复杂,必要的时候要在连线上进行说明。

参考资料:

XMind


2. 书面作业

Q1.clone方法

1.1 Object对象中的clone方法是被protected修饰,在自定义的类中覆盖clone方法时需要注意什么?

1.关键字protected表明这个方法不能被其他包中的类直接调用,因此,在自定义的类中覆盖clone方法时,将protected改为public,以便在任何包都可以调用该方法。同时,还需实现Cloneable接口。

2.使用super.clone(),仅实现了对于可复制类的其他对象进行浅拷贝,即复制的是对象的引用,而不是对象的内容,没有克隆包含在对象中的其他引用型属性。如果要进行深复制,需要使用自定义的复制操作覆盖clone方法,具体如下代码:

  1. class Employee implements Cloneable{
  2. public Employee clone() throws ....{
  3. //call Object.clone()
  4. Employee cloned = (Employee) super.clone();
  5. // clone mutable fields
  6. cloned.hireDay = (Date) hireDay.clone(); //实现深复制
  7. return cloned;
  8. }
  9. }

[参考文章](http://www.itzhai.com/java-based-notebook-the-object-of-deep-and-shallow-copy-copy-copy-implement-the-cloneable-interface-serializing-deep-deep-copy.html#₩ᄋᄆ¥ᄂヘ¥ネᄊ(deep clone)￯ᄐレ)

1.2 自己设计类时,一般对什么样的方法使用protected进行修饰?以作业Shape为例说明。

protected关键字表明其子类可以访问(即使不在同一个包),同包的其他类可以访问父类的protected属性和方法。以Shape为例,Circle类和Rectangle类都是Shape类的子类,这两个子类都包含有getPerimeter()与getArea()方法。所以,在父类中将这两种方法用修饰符protected定义,子类的可进行访问即可。

代码如下:

  1. abstract class Shape
  2. {
  3. private final static double PI = 3.14;
  4. protected abstract double getPerimeter();
  5. protected abstract double getArea();
  6. }

1.3 在test1包中编写简单的Employee类,在test2包中新建一个TestProtected类,并在main中尝试调用test1包中的Employee的clone方法克隆一个新对象,能否成功?为什么?

不能成功,会出现如下图中的错误,因为Employee类和TestProtected类并不在同一个包内,在test1包Employee类中的clone方法是用protected修饰的,对其他包中的类是不可见的,需将protected改为public。

修改后的代码如下:

  1. package test1;
  2. public class Employee implements Cloneable {
  3. private String name;
  4. private double salary;
  5. public Employee(String name, double salary) {
  6. super();
  7. this.name = name;
  8. this.salary = salary;
  9. }
  10. @Override
  11. public Employee clone() throws CloneNotSupportedException{
  12. // TODO Auto-generated method stub
  13. return (Employee) super.clone();
  14. }
  15. @Override
  16. public String toString() {
  17. return "Employee [name=" + name + ", salary=" + salary + "]";
  18. }
  19. }
  1. package test2;
  2. import test1.Employee;
  3. public class TestProtected {
  4. public static void main(String[] args) throws CloneNotSupportedException {
  5. // TODO Auto-generated method stub
  6. Employee employee = new Employee("张三", 5000);
  7. Employee employee2 = employee.clone();
  8. System.out.println(employee2.toString());
  9. }
  10. }

运行结果如下:


Q2.使用匿名类与Lambda表达式改写题集面向对象2-进阶-多态接口内部类的题目5-2

仅需粘贴关键代码与运行结果,图片不要太大。


关键代码:

  1. Comparator<PersonSortable2> NameComparator = new Comparator<PersonSortable2>()
  2. {
  3. @Override
  4. public int compare(PersonSortable2 o1, PersonSortable2 o2) {
  5. return new String (o1.getName()).compareTo(o2.getName());
  6. }
  7. };
  8. Comparator<PersonSortable2> AgeComparator = new Comparator<PersonSortable2>()
  9. {
  10. @Override
  11. public int compare(PersonSortable2 o1, PersonSortable2 o2) {
  12. return o1.getAge()-o2.getAge();
  13. }
  14. }

运行结果:


Q3.分析下列代码,回答shapeComparator所指向的对象与Comparator接口有什么关系?

  1. Comparator<Shape> shapeComparator = new Comparator<Shape>() {
  2. @Override
  3. public int compare(Shape o1, Shape o2) {
  4. //你的代码
  5. }
  6. };

这显然是一个匿名内部类,让shapeComparator实现Comparable接口,使其可以实现对象的比较进而实现排序。只是实现接口,并没有必要给此类取名字,这样也减少了代码量。


Q4.GUI中的事件处理

4.1 写出事件处理模型中最重要的几个关键词。

事件(event):事件对象,比如点击按钮、组件发生变化或按下某个键时便产生了某个事件。

事件源:导致事件产生的组件,比如按钮、标签、文本框等等。

事件监听器:一组动作接口。与之对应的事件发生时,即一般在鼠标点击某个按钮时会产生该事件,该接口包含处理该事件的抽象方法。事件监听器需要注册才能使用,同时也可以注销的。

4.2 使用代码与注释,证明你理解了事件处理模型。

  1. import java.awt.event.ActionEvent;
  2. import java.awt.event.ActionListener;
  3. import javax.swing.JButton;
  4. import javax.swing.JFrame;
  5. public class MainGUI {
  6. public static void main(String[] args) {
  7. JFrame f = new JFrame("Test");
  8. f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  9. JButton b = new JButton("Press Me!");//按钮,事件源
  10. b.addActionListener(new ButtonHandler());//注册监听器
  11. f.add(b);
  12. f.setSize(200, 100);
  13. f.setVisible(true);
  14. }
  15. private static class ButtonHandler implements ActionListener{
  16. //监听器,点击按钮产生事件,然后处理事件
  17. public void actionPerformed(ActionEvent e) {
  18. System.out.println("Action occurred");
  19. System.out.println(e.getSource());//获得事件源
  20. }
  21. }
  22. }

Q5.结对编程:面向对象设计(大作业2-非常重要,未完成-2)

继续完善上周的项目作业。考核点如下:

5.1 尝试使用图形界面改写。

1.登陆界面

2.登陆之后,跳转到搜索界面

3.搜索商品,主要就弄了book类和clothes类,可以选择添加进购物车的商品数量

4.点击查看购物车,跳转到购物车界面显示已加商品信息

5.2 给出两人在码云上同一项目的提交记录截图。

5.3 与上周相比,项目的主要改动是什么?

-将原本的控制台输入输出全部改成由图形界面输入输出

-新增了登陆、注册界面

-购物车类多了一个增加添加进购物车的商品数量


3. PTA实验总结及码云上代码提交记录

3.1本周Commit历史截图

在码云的项目中,依次选择“统计-Commits历史-设置时间段”,然后搜索并截图,如下图所示


3.2 实验总结

实验碰到的问题、思考、收获与解决方案

实验5_3在刚开始编写peek()方法时返回arr[top],导致输出的结果错误;同时,没有考虑到数字数量大于栈的容量,导致PTA上提交答案部分正确

解决方案:返回值改成arr[top-1];每次入栈打印入栈返回结果的代码改成System.out.println(stack.push(x));

具体改动代码如下

  1. public Integer peek() {
  2. // TODO Auto-generated method stub
  3. if(top==0)return null;
  4. else return arr[top-1];
  5. }
  6. for(int i=0;i<m;i++){
  7. int x=in.nextInt();
  8. System.out.println(stack.push(x));
  9. }

实验5_4主要是运用静态内部类,静态内部类相当于一个全新的类。可直接建立,不需要先建立外围类,不能访问外围类的非静态属性与方法。此题主要注意静态内部类的代码编写。

201521123003《Java程序设计》第6周学习总结的更多相关文章

  1. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  2. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  3. 20145213《Java程序设计》第一周学习总结

    20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...

  4. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  5. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  6. 20145337 《Java程序设计》第九周学习总结

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

  7. 20145337 《Java程序设计》第二周学习总结

    20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...

  8. 20145218《Java程序设计》第一周学习总结

    20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...

  9. 《Java程序设计》第九周学习总结

    20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

  10. 《Java程序设计》第二周学习总结

    20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...

随机推荐

  1. PL/SQL 编程(二)游标、存储过程、函数

    游标--数据的缓存区 游标:类似集合,可以让用户像操作数组一样操作查询出来的数据集,实质上,它提供了一种从集合性质的结果中提取单条记录的手段. 可以将游标形象的看成一个变动的光标,他实质上是一个指针, ...

  2. Python web框架总结

    web框架总结 前提 一个web框架需要包含的组件或者功能有: router orm request and response cookies and session template engine ...

  3. 使用MySQL-Proxy读写分离时的注意事项

    在动手操作前最好先安装好MySQL-Proxy,并配置好MySQL主从服务器.补充:新版MySQL已经内建支持 延迟问题 读写分离不能回避的问题之一就是延迟,可以考虑Google提供的SemiSync ...

  4. 为什么重写 equals 方法 必须重写 hashCode

    自己学到这,就记录了下来,代码都是自己敲得,有不对的地方希望大神指点出来 为什么重写 equals 方法 必须重写 hashCode 如果你重写了equals,比如说是基于对象的内容实现的,而不重写 ...

  5. Hexo快速部署教程

    一直有建立博客的需要,使用过Wordpress动态博客,一直访问速度比较慢,刚开始以为是空间域名的解析的问题,尝试使用Hexo静态博客,部署后感觉速度正常很多,特意发文快速部署教程 准备 本文是在wi ...

  6. js原型学习

    js中所有对象都存在一个隐式原型_ _proto_ _,指向创建这个对象的函数的原型prototype; 而函数的原型prototype都是Object函数的一个对象,也有隐式原型,指向的就是Obje ...

  7. JavaScript之节点的创建、替换、删除、插入

    1.节点的创建 节点的创建使用document.creatElment();文本节点的创建使用document.creatTextNode();如想把<li>哈密瓜</li>添 ...

  8. 简单聊天室(java版)

    这是本人从其他地方学习到的关于聊天室的一个模本,我从中截取了一部分关于客户端和服务端通信的Socket的内容.希望对大家对socket有个了解,我写的这些代码可以实现两人或多人在多台电脑上实现简单的对 ...

  9. [mark] first shellcode

    好久没写博客了,今天终于搞出了第一个shellcode,以此mark一下. #include "stdafx.h" #include <Windows.h> #incl ...

  10. AT24C02使用详解

    ---恢复内容开始--- 这篇文章是写给一个学弟看的,关于IIC,关于24C02的单字节写入\读取..页写入和读取,,学弟总是害怕协议,,,我总是对人家说,本来就这样的,协议就是人家这样规定的,,,如 ...