第6周作业-接口、内部类与Swing


1.本周学习总结

2.书面作业

1.clone方法

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

public class Object  {
protected native Object clone() throws CloneNotSupportedException;
}

  在源代码中关于clone方法的定义如上,Object类中的 clone()方法被protected修饰符修饰。这也意味着如果要应用 clone()方 法,必须继承Object类。如果是为了让其它自己定义的类能调用这个clone()方法,重载之后要把clone()方法的属性设置为 public

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

  在我看来呢,需要被其他子类共用的方法可以用protected进行修饰。以做过的shape来说吧,Circle类和Rectangle类都需要求面积和周长,所以getarea()getPerimeter()方法就是他们共有的方法,因此该方法可以用protected进行修饰。

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

package test1;

public class Employee implements Cloneable{
private String name;
private int age;
private double salary; public Employee(String name, int age, double salary) {
super();
this.name = name;
this.age = age;
this.salary = salary;
} @Override
protected Employee clone() throws CloneNotSupportedException {
// TODO Auto-generated method stub
return (Employee) super.clone();
} }
package test2;
import test1.*; public class TestProtected {
Employee employee = new Employee("Tom", 26, 3500);
Employee employee1 = employee.clone();
}

  这样做并不能够成功,编译器会报这样一个错:,意思是clone()方法是不可见的,因为修饰该方法的是protected。我们知道protected修饰的方法仅在test1包中可见,对于test2包是不可见的,如果需要在test2包中使用的话,需要将clone()方法用public修饰。

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

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


匿名类改写部分:

Lambda表达式改写部分:

运行结果:

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

Comparator<Shape> shapeComparator = new Comparator<Shape>() {
@Override
public int compare(Shape o1, Shape o2) { //你的代码 }
};

  shapeComparator所指向的对象是一个Shape类实现的Comparable接口,实现Comparable接口之后可以进行比较。

4.GUI中的事件处理

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


  事件:敲击键盘或点击鼠标这样的行为操作,一般继承自java.util.EventObject类;

  事件源:事件发生的地方,由于事件源的某项属性或状态发生了改变(比如Button被单击、Textbox的值发生改变等等)导致某项事件发生。

  监听器:实现java.awt.event.ActionListener接口,注册在事件源上,当事件源的属性或状态改变时,取得相应的监听器调用其内部的方法。

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

就使用老师上课课件中的代码来添加一些注释吧:

package test;

import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton; public class EventMainGUI1 extends Frame {
static int count = 1; public EventMainGUI1(String title) {
super(title);
} public static void main(String args[]) {
//初始化了一个叫做“hello”的窗口
EventMainGUI1 f = new EventMainGUI1("hello");
f.setLayout(new FlowLayout());
//定义了一个不可变的按钮b,并赋上初始值1,按钮b就是一个事件源
final JButton b = new JButton("1");
//注册监听器,每当b被按下的时候,按钮上的值就加1(也就是当事件源的状态被改变后,监听器就会调用其内部的方法,此时的内部方法就是使按钮b的初始值自增1)
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
b.setLabel(new Integer(++count).toString());
}
});
f.add(b);//向窗口f中加入b按钮
f.setSize(100, 100);
f.setBackground(Color.blue);
f.setVisible(true);//设置窗口可以被看见
}
}

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

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

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


登录界面关键代码:

private void LoginButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_LoginButtonActionPerformed
String a = nameTextField.getText();
String b = passTextField.getText();
if(a.equals(b)){
Tips.setText("Login successfully!");
new Shoppingcart().setVisible(true);
this.setVisible(false);
}
else
Tips.setText("Login failed , try another name or password");
}//GEN-LAST:event_LoginButtonActionPerformed

登录界面:

(1)密码正确,就弹出购物界面



(2)密码错误,就提示出错

购物界面关键代码:

购物界面:

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

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

  这次的任务分配:

  201521123107 张翔 主要负责具体代码的添加

  201521123084 林正晟 负责构建图形界面

  上周的购物车我们没有加入登陆界面,所以这次我们新增了一个登陆界面。原计划呢,我们是商品界面与购物车分别做一个窗体,结果我们在做的时候缺乏沟通,这是一个很大的忌讳。伙伴图形界面做好了,我对着界面表示无奈,根本无从下手,导致最后将购物车和商品界面混在一起。当我想把整个界面推倒重做的时候,发现有些难度,所以我们只能将原来的购物车界面改为商品界面,然后把需要购买商品的数量、总价都合到了同一个界面上。

  总的来说,这次合作编程的失败在于两个人缺乏对于根据上一次代码的图形界面设想的沟通,导致了界面做出来了,不知道要往什么地方编写自己的代码,不过我们还是有值得肯定的地方,我们的登陆界面实现的还是比较成功。

3.使用码云管理Java代码

本周Commit历史截图

4.PTA实验

实验总结

  这次的实验有两题,本来是上机课就可以完成的,但是因为程序里有很多地方需要调试,所以没来得及给老师检查。

  第一题我认为最核心的部分就是用数组实现栈的功能。定义IntegerStack的实现类ArrayIntegerStack,内部使用数组实现,所有的方法实现都是为了数组服务的,总体上难度不算大,困住我最久的是入栈。样例输入是输入三个,但我一直入栈只有两个数,第3个数字一直没有入栈,后来发现是多吃了一个空格,导致第三个数字的位置被空格占据没能入栈。还有就是数次的答案错误(已经是自己见怪不怪的老问题了),答案都对就是过不了,发现是自己少使用Arrays.toString()输出内部数组中的值。

  第二题较第一题更简单一些。遇到最大的问题是PairResult findMinMax(double[] values)中返回值的问题,我一直无法将找到的最大和最小值返回。起初以为是取值的问题,第一次发现确实是取最值的方法有误,修正过方法后发现值并没有被返回,发现需要return PairResult(min,max)才能将最值返回。

201521123107 《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. Trailing Zeroes (III)

    You task is to find minimal natural number N, so that N! contains exactly Q zeroes on the trail in d ...

  2. 【有意思的BUG】客户端无厘头 已连网的场景初始化太慢 未连网的场景异常崩溃

    客户端 已连网的场景初始化太慢 当在未连接internet的时候,打开某些APP,会比较迅速地初始化进入到主页面. 但是当我在已经连接了internet的时候,打开某些APP,有些会初始化很久!!!! ...

  3. Oracle B-tree、位图、全文索引三大索引性能比较及优缺点汇总

    引言:大家都知道“效率”是数据库中非常重要的一个指标,如何提高效率大家可能都会想起索引,但索引又这么多种,什么场合应该使用什么索引呢?哪种索引可以提高我们的效率,哪种索引可以让我们的效率大大降低(有时 ...

  4. JavaScript高级程序设计 - 阅读笔记

    [本博客为原创:http://www.cnblogs.com/HeavenBin/] 前言: 大致花费了一个星期的时间把这本书认真看了半本,下面是我做的阅读笔记,希望能够让看这本书的人有个大致的参考. ...

  5. ffmpeg音频播放代码示例-avcodec_decode_audio4

    一.概述 最近在学习ffmpeg解码的内容,参考了官方的教程http://dranger.com/ffmpeg/tutorial03.html,结果发现这个音频解码的教程有点问题.参考了各种博客,并同 ...

  6. TensorFlow框架之Computational Graph详解

    1. Getting Start 1.1 import TensorFlow应用程序需要引入编程架包,才能访问TensorFlow的类.方法和符号.如下所示的方法: import tensorflow ...

  7. Ubuntu 发行版的 Linux 操作系统

    Ubuntu 发行版的 Linux 操作系统.. ------------------------------------- ------------------------------------- ...

  8. APUE 3 -- 信号(signal)<I> :概念

    信号可以理解成一种软件中断.他提供了一种异步处理事件的方式.每个信号都有一个与之对应的信号名,这些信号名都带有SIG前缀,如:SIGABRT,SIGALARM.头文件signal.h 中定义了所有的信 ...

  9. MySql按每日、每周、每月分组统计数据

    select DATE_FORMAT(create_time,'%Y%u') weeks,count(caseid) count from tc_case group by weeks; select ...

  10. hbase1.1.4集群搭建

    hbase1.1.4集群搭建 先部署一个zookeeper集群和hadoop集群. (1)上传hbase安装包到intsmaze01节点 (2)解压 (3)配置hbase集群,要修改3个文件 注意:要 ...