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上就是说我判断“考虑空栈、满栈的状态”出错,不知道为什么。