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周学习总结的更多相关文章

  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. 【转载】QT MySQL数据库操作总结

    转载自http://blog.chinaunix.net/uid-28194872-id-3631462.html #include <QtSql> QT += sqlQSqlDataba ...

  2. 运行和控制Nginx

    Nginx命令行选项 启动.停止.重启nginx命令 如何重新加载nginx配置文件 nginx程序不重启平滑升级可执行文件   nginx命令行参数 不像许多其他软件系统,Nginx 仅有几个命令行 ...

  3. shell /bin/bash^M: bad interpreter错误解决

      错误原因之一很有可能是你的脚本文件是DOS格式的, 即每一行的行尾以\r\n来标识, 其ASCII码分别是0x0D, 0x0A.可以有很多种办法看这个文件是DOS格式的还是UNIX格式的, 还是M ...

  4. HDU 6170----Two strings(DP)

    题目链接 Problem Description Giving two strings and you should judge if they are matched.The first strin ...

  5. 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——收流篇:(一)简介

    关于实时流媒体传输的开源库,目前流行的主要有两个:live555和jrtplib. 其中live555将rtp.rtcp和rtsp的传输协议实现集于一身,功能齐全,是个超强的集合体.但是对于嵌入式系统 ...

  6. jenkins 多选框

    背景jenkins自带的参数化不支持多选框,不过有插件支持:Extended Choice Parameter Plug-In插件地址: https://plugins.jenkins.io/exte ...

  7. 博文Contents<451--到999—>

    积分=排名>2017-05-15这一天还真是厉害了.让我等了5个月时间... 前言:博客中的随笔文章.并非都是笔者的原创文章.有些是听别人说的.有些是书上摘录的.有些是百度的.有些是别人博客的文 ...

  8. 如何将Windows7系统中“运行”历史记录全部清除

    如何将Windows7系统中“运行”历史记录全部清除.. 如何将Windows7系统中“运行”历史记录全部清除 1.任务栏空白处按下鼠标右键,在右键菜单栏中选择“属性”, 2.切换到“开始菜单”选项卡 ...

  9. Win10各版本区别

    Win10各版本之间的区别.. ------------------- =============================================功能最强大的,不是日后绝大多数中国用户 ...

  10. Ubuntu安装卸载anaconda

    安装要点: 1.在Anaconda官网https://www.continuum.io/downloads内下载需要的版本: 2.打开终端--进入下载安装包所在的文件夹(cd 文件名)--输入命令:b ...