1. 本周学习总结
2. 书面作业
1.clone方法
1.1 Object对象中的clone方法是被protected修饰,在自定义的类中覆盖clone方法时需要注意什么?
1.2 自己设计类时,一般对什么样的方法使用protected进行修饰?以作业Shape为例说明。
1.3 在test1包中编写简单的Employee类,在test2包中新建一个TestProtected类,并在main中尝试调用test1包中的Employee的clone方法克隆一个新对象,能否成功?为什么?
- (1)在自定义的类覆盖clone方法要注意:声明为public和实现Cloneable接口。
- (2)protected访问权限:自身,子类及同一个包中类可以访问。以Shape为例,getPerimeter()与getArea()分别为计算周长与面积的方法,而Rectangle类和Circle类继承了shape类并且又调用这两个方法,因此可用protected修饰getPerimeter()与getArea()。
- (3)不能成功,因为Employee类和TestProtected类不在同一个包内。
2.使用匿名类与Lambda表达式改写题集面向对象2-进阶-多态接口内部类的题目5-2,仅需粘贴关键代码与运行结果,图片不要太大。
public class ComparatorAnoymous {
public static void main(String[] args) {
Comparator<PersonSortable2> NameComparator = new Comparator<PersonSortable2>(){
public int compare(PersonSortable2 o1, PersonSortable2 o2) {
return o1.getName().compareTo(o2.getName());
}
};
Comparator<PersonSortable2> AgeComparator = new Comparator<PersonSortable2>(){
public int compare(PersonSortable2 o1, PersonSortable2 o2) {
return o1.getAge()-o2.getAge();
}
};
Scanner sc=new Scanner (System.in);
int n = sc.nextInt();
PersonSortable2[] test=new PersonSortable2[n];
for (int i = 0; i < n; i++) {
test[i] = new PersonSortable2(sc.next(), sc.nextInt());
}
System.out.println("NameComparator:sort");
Arrays.sort(test,NameComparator);
for (PersonSortable2 personSortable1 : test) {
System.out.println(personSortable1);
}
System.out.println("AgeComparator:sort");
Arrays.sort(test,AgeComparator);
for (PersonSortable2 personSortable2 : test) {
System.out.println(personSortable2);
}
}
}
\\Lambda表达式
Comparator<PersonSortable2> NameComparator=(o1,o2)-> o1.getName().compareTo(o2.getName());
Comparator<PersonSortable2> AgeComparator=(o1,o2)-> o1.getAge()-o2.getAge();
3.分析下列代码,回答shapeComparator所指向的对象与Comparator接口有什么关系?
Comparator<Shape> shapeComparator = new Comparator<Shape>() {
@Override
public int compare(Shape o1, Shape o2) {
//你的代码
}
};
- shapeComparator重写Comparator接口当中的compare方法,所以shapeComparator类是实现了Comparator接口的,并且可以通过Arrays.sort进行调用。
4.GUI中的事件处理
4.1 写出事件处理模型中最重要的几个关键词。
4.2 使用代码与注释,证明你理解了事件处理模型。
- (1)事件:用户对程序的某一种功能性操作.
事件源:产出事件的组件.
事件监听器:接收事件并对其进行处理。- (2)
import java.awt.*;
import javax.swing.*;
public class javagui {
public static void main(String args[]) {
JFrame f = new JFrame();//创建一个框架。
f.setLayout(new FlowLayout());//设置框架布局。
JButton button1 = new JButton("Open");//创建第一个按钮
JButton button2 = new JButton("Close");//创建第二个按钮
f.add(button1);//在框架中添加第一个按钮
f.add(button2);//在框架中添加第二个按钮
f.setSize(400, 350);//设置框架大小
f.setVisible(true);//设置框架可见。
f.setTitle("GUI");//设置框架标题
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//用户关闭框架时的响应动作,EXIT_ON_CLOSE代表框架该框架关闭时,整个程序退出
}
}
5.结对编程:面向对象设计(大作业2-非常重要,未完成-2)
继续完善上周的项目作业。考核点如下:
5.1 尝试使用图形界面改写。
5.2 给出两人在码云上同一项目的提交记录截图。
5.3 与上周相比,项目的主要改动是什么?
3. 码云上代码提交记录及PTA实验总结
在public Integer pop(),public Integer peek(),public boolean empty()三个方法中要求判断栈是否为空,为空就返回null时,我的代码是if(arr.length==0)return null,尽管运行不报错,但PTA上就是说我判断“考虑空栈、满栈的状态”出错,不知道为什么。