201521123006 《Java程序设计》第6周学习总结
1. 本周学习总结
**1.1 面向对象学习暂告一段落,请使用思维导图,以封装、继承、多态为核心概念画一张思维导图,对面向对象思想进行一个总结。 **
- 注1:关键词与内容不求多,但概念之间的联系要清晰,内容覆盖面向对象的核心内容即可。
- 注2:颜色要少、连线不要复杂,必要的时候要在连线上进行说明。

**1.2 可选:使用常规方法总结其他上课内容。 **
- 接口:(1)接口(interface)就是方法声明和常量值的集合。
(2)实现接口的类叫接口的实现类。
(3)Comparable接口抽象出了比较的共同特性。
(4)接口不是类,不能使用new进行实例化,使用instanceof运算符,可以扩展,可以包含常量。
(5)一个类可以实现多个接口。
(6)对象克隆使用Cloneable接口:(1)覆盖clone方法,声明为public。(2)实现Cloneable接口。
(7)回调使用ActionListener接口。
(8)嵌套类分为两种:static,non static(被称为内部类)。
(9)匿名类:匿名类没有类名,使用Lambda表达式可以大幅简化代码。 - GUI与Swing:(1)顶层窗口被称为框架(Frame),Swing中叫JFrame。
(2)初始化语句结束后,main方法退出但没有终止程序,终止的只是主线程。
(3)Component类中的setLocation(x,y)(设置位置), setBounds(x,y,width,height) (设置位置与大小)。
(4)布置组件在界面中的位置:(1)使用NetBeans IDE,不用手写相关布局代码。直接在页面上进行拖放调整即可(WYSIWYG)。(2)也可以自己手动编写布局代码,这时候就需要了解布局管理器。
2. 书面作业
**1.clone方法 **
**1.1 Object对象中的clone方法是被protected修饰,在自定义的类中覆盖clone方法时需要注意什么? **
(1)clone方法的源代码为:protected native Object clone() throws CloneNotSupportedException;
因为clone方法被protected修饰,所以clone方法将不能在类的外部使用。
(2)因此在自定义的类中覆盖clone方法需要将访问修饰符从protected改设为public。
**1.2 自己设计类时,一般对什么样的方法使用protected进行修饰?以作业Shape为例说明。 **
(1)因为使用protected修饰,是当我们希望可以直接访问父类成员的时候或者是希望被子类覆盖的时候。使用protected进行修饰的方法子类可以访问,同包的其他类也可以访问父类的protected属性和方法。
(2)所以对于作业Shape来说
abstract class Shape {
public static double PI=3.14;
protected abstract double getPerimeter();
protected abstract double getArea();
}
class Rectangle extends Shape{
...//此段代码省略
}
class Circle extends Shape{
...//此段代码省略
}
此时Shape是父类,有getPerimeter()和getArea();两种方法,而Rectangle类和Circle类都继承了Shape类,是Shape的子类,所以他们都有getPerimeter()和getArea();两种方法,这是我们就可以使用protected进行修饰。
**1.3 在test1包中编写简单的Employee类,在test2包中新建一个TestProtected类,并在main中尝试调用test1包中的Employee的clone方法克隆一个新对象,能否成功?为什么? **
package test1;
public class Employee implements Cloneable {
private String name;
private double salary;
public Employee(String n, double s){
super();
this.name = n;
this.salary = s;
}
protected Employee clone() throws CloneNotSupportedException
{
// call Object.clone()
Employee cloned = (Employee) super.clone();
return cloned;
}
}
package test2;
import test1.Employee;
class TestProtected{
private String name1;
private double salary1;
}
public class Test
{
public static void main(String[] args)
{
Employee original = new Employee("John Q. Public", 50000);
Employee copy = null;
try{
copy = original.clone();
}
catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("original=" + original);
System.out.println("copy=" + copy);
}
}
不能成功,因为Employee类和TestProtected类没有在一个包中,而clone方法为protected修饰,所以不能成功。如果想要成功需要将protected改为public。
**2.使用匿名类与Lambda表达式改写题集面向对象2-进阶-多态接口内部类的题目5-2 **
- 仅需粘贴关键代码与运行结果,图片不要太大。
- 匿名类
Comparator<PersonSortable2> NameComparator = new Comparator<PersonSortable2>(){
@Override
public int compare(PersonSortable2 o1, PersonSortable2 o2) {
if(!o1.getName().equals(o2.getName())){
if(o1.getName().compareTo(o2.getName())>0)
return 1;
else
return -1;
}
return 0;
}
};
Comparator<PersonSortable2> AgeComparator = new Comparator<PersonSortable2>(){
@Override
public int compare(PersonSortable2 o1, PersonSortable2 o2) {
if(!(o1.getAge()==o2.getAge())){
if(o1.getAge()>o2.getAge())
return 1;
else
return -1;
}
return 0;
}
};

- Lambda表达式
Comparator<PersonSortable2> AgeComparator = (o1,o2)->{
if(!(o1.getAge()==o2.getAge())){
if(o1.getAge()>o2.getAge())
return 1;
else
return -1;
}
return 0;
};
Comparator<PersonSortable2> NameComparator = (o1,o2)->{
if(!o1.getName().equals(o2.getName())){
if(o1.getName().compareTo(o2.getName())>0)
return 1;
else
return -1;
}
return 0;
};

**3.分析下列代码,回答shapeComparator所指向的对象与Comparator接口有什么关系? **
Comparator<Shape> shapeComparator = new Comparator<Shape>() {
@Override
public int compare(Shape o1, Shape o2) {
//你的代码
}
};
shapeComparator所指向的对象实现了Comparator接口,在匿名类中重写接口当中的抽象方法,使得可以使用接口的抽象方法,例如本题的compare方法。
**4.GUI中的事件处理 **
**4.1 写出事件处理模型中最重要的几个关键词。 **
- 事件:在GUI上的操作时会触发的相对应的事件,例如敲击键盘或点击鼠标这样的事件。
- 事件源:产出事件的组件,例如按钮。
- 事件处理方法:能够接受,分析,处理事件类对象,实现与用户交流的方法。
- 事件监听器:对组件所产生的事件作出具体响应的代码,也可以说是调用事件处理方法的对象,例如ActionListener监听器。
- 事件适配器:根据所使用的的事件监听器调用对应的事件适配器,使用事件适配器的方法,这样仅需重写需要的代码就行。
**4.2 使用代码与注释,证明你理解了事件处理模型。 **
使用匿名类实现监听接口
public class EventMainGUI1 extends Frame{
static int count=1;
public EventMainGUI1 (String title){super(title);}
public static void main(String args[]){
EventMainGUI1 f=new EventMainGUI1 ("hello");//初始化窗体,标题为"hello"
f.setLayout(new FlowLayout());//采用流式布局
final JButton b = new JButton("1");//事件源,创建一个按钮,初始化文本为"1"
//监听器,添加一个活动监听
b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evt){
//每次count加1,就会触发
b.setLabel(new Integer(++count).toString());
}
};
f.add(b);//添加按钮
f.setSize(100,100);//设置窗体大小
f.setBackground(Color.blue);//设置窗体颜色
f.setVisible(true);//设置窗口显示出来:如果窗口是第一次显示,将事先初始化窗口显示的相关资源再显示
}
}
**结对编程:面向对象设计(大作业2-非常重要,未完成-2) **
继续完善上周的项目作业。考核点如下:
**5.1 尝试使用图形界面改写。 **


private void loginActionPerformed(java.awt.event.ActionEvent evt) {
String a=user.getText();
String b=password.getText();
if(a.equals("xwp")&&b.equals("123456")){
output.setText("登录成功,欢迎选购");
new NewJFrame1().setVisible(true);
}
else
output.setText("登录失败,请重新输入");
}
private void exitActionPerformed(java.awt.event.ActionEvent evt) {
System.exit(0);
}

private void watchActionPerformed(java.awt.event.ActionEvent evt) {
new NewJFrame2().setVisible(true);
}
private void exitActionPerformed(java.awt.event.ActionEvent evt) {
System.exit(0);
}
private void userActionPerformed(java.awt.event.ActionEvent evt) {
new NewJFrame4().setVisible(true);
}
private void searchActionPerformed(java.awt.event.ActionEvent evt) {
new NewJFrame3().setVisible(true);
}
private void shoppingcartActionPerformed(java.awt.event.ActionEvent evt) {
new NewJFrame5().setVisible(true);
}
进行各个窗体之间的跳转。
- 浏览商品

private void ShoppingcartActionPerformed(java.awt.event.ActionEvent evt) {
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
}
- 搜索商品


private void searchActionPerformed(java.awt.event.ActionEvent evt) {
String key=goodname.getText();
if(key.equals("Java"))
put.setText("商品:Java - 单价:65.30");
else if(key.equals("Math"))
put.setText("商品:Math - 单价:33.80");
else if(key.equals("数字逻辑"))
put.setText("商品:数字逻辑 - 单价:35.00");
else if(key.equals("skirt"))
put.setText("商品:skirt - 单价:87.50");
else if(key.equals("jeans"))
put.setText("商品:jeans - 单价:99.00");
else if(key.equals("jacket"))
put.setText("商品:jacket - 单价:150.00");
else
put.setText("对不起,没有找到该商品");
}
private void closeActionPerformed(java.awt.event.ActionEvent evt) {
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
}
- 显示信息

private void ShoppingcartActionPerformed(java.awt.event.ActionEvent evt) {
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
}
- 查看购物车

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

**5.3 与上周相比,项目的主要改动是什么? **
项目的主要改动是:使用NetBeans进行编程,进行输入输出。主要是将原代码中的输入输出有控制台改为图形界面输入输出。
参考资料:
结对编程参考资料
使用Processon画图
视频-使用Netbeans编写GUI
重要:Swing实验参考资料
JTable用法,用于呈现表格数据
Swing相关文章
**3. 码云上代码提交记录及PTA实验总结 **
**题目集:jmu-Java-04-面向对象2-进阶-多态接口内部类 **
**3.1. 码云代码提交记录 **
- 在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图

**3.2. PTA实验 **
函数(选做:4-1)、编程(5-3, 5-4)
一定要有实验总结
实验4-1:本题中的输入需要使用final关键字进行修饰,并且使用了匿名内部类的方法,还需要在匿名类中重写ActionListener对象相应的方法。
实验5-3:本题中使用了栈来储存输入的值,这时候我们就需要考虑栈空和栈满的情况,可以使用栈顶指针的值来判断,并且输出栈内元素时栈顶指针先减一。
实验5-4:本题中在
ArrayUtils类内部创建一个静态内部类PairResult。在ArrayUtils类中使用PairResult类的方法时,只需使用类名.方法名调用就行。而在Main函数中则是使用ArrayUtils.方法名来调用。
201521123006 《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 ...
随机推荐
- Loadrunner常见错误处理方法
1.错误 -26601: 解压缩函数(wgzMemDecompressBuffer)失败,返回代码=-5 (Z_BUF_ERROR).inSize=0.inUse=0.outUse=0 用LR做压力测 ...
- 关于flask线程安全的简单研究
flask是python web开发比较主流的框架之一,也是我在工作中使用的主要开发框架.一直对其是如何保证线程安全的问题比较好奇,所以简单的探究了一番,由于只是简单查看了源码,并未深入细致研究,因此 ...
- web添加第三方应用,前端解决跨域问题的8种方案
应用场景 web应用通过QQ登录授权实现第三方登录. 操作步骤 1. 注册成为QQ互联平台开发者,http://connect.qq.com/ 2. 准备一个可访问的域名,如dev.foo.com 3 ...
- HTML5 — Wed Storage简单示例
一.Wed Storage 概述 Wed Storage功能:在Wed上储存数据的功能,这里的储存是针对客户端本地而言的. 具体分为两种: sessionStorage,将数据保存在session对象 ...
- [INS-30060]:Check for group existence failed
--[INS-30060]:Check for group existence failed -------------------------------------------------2013 ...
- centos下从源码安装openssl
cd /usr/src wget https://www.openssl.org/source/openssl-1.0.1g.tar.gz -O openssl-1.0.1g.tar.gz tar - ...
- 1>MSBUILD : cordova-build error BLD401: 错误: BLD00401: 找不到模块“C:\Users\z-pc\AppData\Roaming\npm\node_modules\vs-tac\app.js”。请转到“工具”-->“选项”-->“Apache Cordova 工具”-->“Cordova 工具”-->“清除 Cordova 缓存”,然后尝试重新生成
1>------ 已启动全部重新生成: 项目: BlankCordovaApp2, 配置: Debug Android ------1> Your environment has bee ...
- python版mapreduce题目实现寻找共同好友
看到一篇不知道是好好玩还是好玩玩童鞋的博客,发现一道好玩的mapreduce题目,地址http://www.cnblogs.com/songhaowan/p/7239578.html 如图 由于自己太 ...
- [2015-10-11]常用git命令
从vs2013开始,vs已经对git的操作提供了很好的支持,但是重度使用时还是会遇到很多抽风的时候,在此记录一些常用命令. 分支操作 查看所有远程分支 git branch -r 查看本地分支 git ...
- KVM+Qemu+Libvirt实战
上一篇的文章是为了给这一篇文件提供理论的基础,在这篇文章中我将带大家一起来实现在linux中虚拟出ubuntu的server版来 我们需要用KVM+Qemu+Libvirt来进行kvm全虚拟化,创建虚 ...