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 ...
随机推荐
- Python获取区域面积
import cv2 import numpy as np def get_leave_areas(image): img = cv2.imread(image) GrayImage = cv2.cv ...
- python 初学习 模拟用户登录
#!/usr/bin/env python#coding:utf-8''' 2017年8月19日 模拟用户登录,userfile 文件保存字典 用户名,和密码 sorryname 文件保存字典 登录过 ...
- javaweb 登陆注册页面
视图的数据修改,表中也修改引用工具类用<%@ page import=""%> <%@ page import="java.util.Date" ...
- Ubuntu安装iNOde
学校使用的是Inode客户端认证上网的.而且还只能使用iNodeSetup3.60-6210版本进行连接,之前使用Ubuntu 32位版本,可以完美地安装并能够连接到网站.由于我的机子是64位的机子, ...
- 前端应该知道的Web Components
前端组件化的痛点 在前端组件化横行的今天,确实极大的提升了开发效率.不过有一个问题不得不被重视,拟引入的这些html.css.js代码有可能对你的其他代码造成影响. 虽然我们可以通过命名空间.闭包等一 ...
- SVProgressHUD源码解读(2.0.3)
SVProgressHUD是iOS开发中比较常用的一个三方库,用来在执行耗时操作或者指示用户操作结果的场合,由于使用简单,功能丰富,交互友好,被广泛应用.本文从源码的角度,解读一下实现的过程,希望能起 ...
- spotlight 索引重建
从Mac的App Store 上 自动更新微信之后,发现不能在SpotLight上搜索到了. 想着应该是索引出现了问题. 方法一. 采用如下命令重建索引: sudo mdutil -i off /该命 ...
- ExoPlayer Talk 01 缓存策略分析与优化
操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Android studio 2.3.3 | ExoPlayer r2.5.1 使用 ExoPlayer已经有一段时间了, ...
- Python 字典和集合
泛映射类型 collections.abc 模块中有 Mapping 和 MutableMapping 这两个抽象基类,它们的作用是为 dict 和其他类似的类型定义形式接口(在Python 2.6 ...
- Spring(三)之自动装配、表达式
自动装配 自动装配(autowire)协作者 Spring IoC容器可以自动装配(autowire)相互协作bean之间的关联关系.因此,如果可能的话,可以自动让Spring通过检查BeanFact ...