201521123038 《Java程序设计》 第六周学习总结

时间:2022-12-02 19:21:21

201521123038 《Java程序设计》 第六周学习总结


1. 本周学习总结

201521123038 《Java程序设计》 第六周学习总结

2. 书面作业

1.clone方法

1.1 Object对象中的 clone 方法是被protected修饰,在自定义的类中覆盖clone方法时需要注意什么?

如果要在子类中覆盖clone方法,则该方法要被public修饰。
如果要拷贝的类型是基本数据类型,可以直接进行简单的拷贝。但是如果是引用类型,如String类型,那么有两种拷贝方式,深拷贝和浅拷贝。

1.2 自己设计类时,一般对什么样的方法使用protected进行修饰?以作业Shape为例说明。

被protected修饰的方法对本包可见,对该方法所在类的子类也是是可见的,但是不可以被外部包访问。在Shape中定义的抽象类Shape中定义的抽象方法getPerimetergetArea都可以用protected来修饰,对子类Rectangle和Circle是可见的。

1.3 在test1包中编写简单的Employee类,在test2包中新建一个TestProtected类,并在main中尝试调用test1包中的Employee的clone方法克隆一个新对象,能否成功?为什么?

201521123038 《Java程序设计》 第六周学习总结

提示错误:Unhandled exception type CloneNotSupportedException。因为在调用clone的类中没有实现Cloneable接口。这边提示了两种修改方法。顺便测试一下深浅拷贝。

第一种:
201521123038 《Java程序设计》 第六周学习总结

第二种:
201521123038 《Java程序设计》 第六周学习总结

但是显示都是浅拷贝,因为在重写clone的时候没有对String类的name进行处理。

2.使用匿名类与Lambda表达式改写题集面向对象2-进阶-多态接口内部类的题目5-2

仅需粘贴关键代码与运行结果,图片不要太大。

用匿名类与Lambda表达式重写排序方法:

可以直接在类中重写方法:


public static Comparator<PersonSortable2> NameComparator=(o1,o2)->
{
return o1.getName().compareTo(o2.getName());
};

public static Comparator<PersonSortable2> AgeComparator=(o1,o2)->
{
return o1.getAge()-o2.getAge();
};

也可以在main中调用排序的时候写方法:


Arrays.sort(list,(o1,o2)->o1.getName().compareTo(o2.getName()));

Arrays.sort(list,(o1,o2)->o1.getAge()-o2.getAge());

运行结果:
201521123038 《Java程序设计》 第六周学习总结

3.分析下列代码,回答shapeComparator所指向的对象与Comparator接口有什么关系?


Comparator<Shape> shapeComparator = new Comparator<Shape>(){

@Override

public int compare(Shape o1, Shape o2) {
//你的代码
}
};

用匿名内部类的方法编写,让shapeComparator实现Comparator接口,可以直接通过Arrays.sort进行排序。

4.GUI中的事件处理

4.1 写出事件处理模型中最重要的几个关键词。

在java中的事件处理模型,包括三部分:事件源—事件对象—事件监听器

4.2 使用代码与注释,证明你理解了事件处理模型。

拿老师的参考视频做个例子:

    private void calActionPerformed(java.awt.event.ActionEvent evt) {

String a=aTextField.getText();//输入字符串a

String b=bTextField.getText();//输入字符串b

result.setText(a+b);//合并字符串
}

这是一个鼠标点击JButton触发的事件。在输入框中输入字符串a和b,通过点击按钮执行代码,目的在于将输入的字符串a和b合并,并在标签result里输出。

5.结对编程:面向对象设计(大作业2-非常重要,未完成-2)

继续完善上周的项目作业。考核点如下:

5.1 尝试使用图形界面改写。

201521123038 《Java程序设计》 第六周学习总结

用图形界面做了购物界面和购物车界面,但是两个界面之间的跳转目前还没有实现,购物车界面的输出上还有问题。

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

201521123038 《Java程序设计》 第六周学习总结

5.3 与上周相比,项目的主要改动是什么?

  • 首先是对上周的代码进行调整,完善了一下购物车类的设定
  • 其次是用图形界面改写程序,原来的程序不一定适用于图形界面,要根据界面设计进行调整,图形界面的一些功能实现和预想中的相比还是有难度的。

3. 码云上代码提交记录及PTA实验总结

3.1. 码云代码提交记录

201521123038 《Java程序设计》 第六周学习总结

3.2. PTA实验

  • 1.编写栈用ArrayList比用数组更容易,因为栈有先进后出的特点,而ArrayList中的添加删除等都有直接的代码可以应用于头尾位置,用数组编写需要定义栈顶指针,并且在操作中要处理指针的移动情况。在编写的过程中也要考虑入栈出栈为null的情况。

  • 2.使用匿名类与Lambda表达式简化代码,可以直接写在排序语句内。例:Arrays.sort(list,(o1,o2)->o1.getAge()-o2.getAge());

  • 3.参考链接:谨慎地覆盖clone