《Java技术》第五次作业
Java第五次作业
一 . 学习总结
1. XMind知识总结
- 截图:
2.汽车租赁公司
- 程序设计思路:
- 创建Car1接口,定义抽象方法
- 创建Car2接口,定义抽象方法
- 创建Car抽象类,定义抽象方法
- 创建Coach类,Truck类,Pickup类,继承Car类,Coach类覆写Car1,Truck类覆写Car2的方法,Pickup类覆写Car1,Car2方法
- 还可以创建CarRent类,对功能进行实现
- 最后还可以创建测试类,对功能进行合理化实现并有逻辑进行退出程序
- 类图
3. 关于接口的实现与注意事项
- 此程序有错,不能编译通过
- 错误一:类型 Dog 必须实现继承的抽象方法 Animal.run()
原因:接口定义存在全局常量与抽象方法,实现接口的类中必须实现接口所定义的抽象方法- 错误二:不能降低自 Animal 继承的方法的可视性
原因:接口的抽象方法默认为public权限,可以不写,但是实现接口的类中覆写的抽象方法必须写public- 修改后的代码:
package excise;
interface Animal {
void breathe();
void run();
void eat();
}
class Dog implements Animal {
public void breathe() {
System.out.println("I'm breathing");
}
public void eat() {
System.out.println("I'm eating");
}
public void run() {
System.out.println("I'm runing");
}
}
public class Test {
public static void main(String[] args) {
Dog dog = new Dog();
dog.breathe();
dog.eat();
dog.run();
}
}
- 运行结果:
I'm breathing
I'm eating
I'm runing
4. java.util.Arrays包
-
查看String源码:
public int compareTo(String anotherString) { int len1 = count; int len2 = anotherString.count; int n = Math.min(len1, len2); char v1[] = value; char v2[] = anotherString.value; int i = offset; int j = anotherString.offset; if (i == j) { int k = i; int lim = n + i; while (k < lim) { char c1 = v1[k]; char c2 = v2[k]; if (c1 != c2) { return c1 - c2; } k++; } } else { while (n-- != 0) { char c1 = v1[i++]; char c2 = v2[j++]; if (c1 != c2) { return c1 - c2; } } } return len1 - len2; }
-
对源码的解释:
String属于对象,String类继承了comparable接口,使用compareTo方法比较,Arrays中只提供基本数据类型数组排序,其他的都从属于Arrays.sort(Object[])。
其他的Object类型排序需要对象实现CompareTo接口,或使用实现了ComparaTor接口的对象作为Arrays.sort方法。 -
或使用实现了Comparator接口的对象作为Arrays.sort方法的第二个参数。
-
查看String源码:
public static final Comparator<String> CASE_INSENSITIVE_ORDER = new CaseInsensitiveComparator(); private static class CaseInsensitiveComparator implements Comparator<String>, java.io.Serializable { // use serialVersionUID from JDK 1.2.2 for interoperability private static final long serialVersionUID = 8575799808933029326L; public int compare(String s1, String s2) { int n1 = s1.length(); int n2 = s2.length(); int min = Math.min(n1, n2); for (int i = 0; i < min; i++) { char c1 = s1.charAt(i); char c2 = s2.charAt(i); if (c1 != c2) { c1 = Character.toUpperCase(c1); c2 = Character.toUpperCase(c2); if (c1 != c2) { c1 = Character.toLowerCase(c1); c2 = Character.toLowerCase(c2); if (c1 != c2) { // No overflow because of numeric promotion return c1 - c2; } } } } return n1 - n2; } }
-
修改后的代码:
import java.util.Arrays; public class Test { public static void main(String[] args) { String[] fruits = { "peach", "banana", "orange", "apple" }; Arrays.sort(fruits); for (int i = fruits.length-1; i >= 0; i--) { System.out.println(fruits[i]); } } } 运行结果: peach orange banana apple
5.其他知识总结
- 对PowerDesigner的使用注意事项
- 继承与接口选项在如下图框起来的第五项与第七项
- 导出类图以图片形式存在时,按shift选中你所要导出的对象,点击菜单栏编辑里的导出图像即可导出
二 . 实验总结
1. 简单工厂设计模式设计音乐盒
-
程序设计思路:
- 按照题目要求,创建MusicBox接口,定义抽象方法play()
- 创建两个类,PianoBox与ViolonBox类,覆写play()方法
- 创建MusicBoxFactory类产生MusicBox实例,对其进行异常处理
- 创建测试类,实现MusicBox的实例化,调用play()方法进行输出
-
问题1:
- 要真正明白工厂设计模式,对异常处理进行深入理解
-
解决方案:
- 联合书中的实例进行测试,自己运行程序,自己多练习写代码,熟悉规则
2. 使用java.util.Date类,comparable接口,comparator接口
-
程序设计思路:
- 创建Dept类,存在编号,姓名的属性,与员工类进行联系,存在员工类的对象与对象数组
- 创建员工类,存在编号,姓名,性别的属性,根据题目要求,增加Dept类的对象,还有Date类的两个对象,进行对生日与工作时间的存储,还需要增加对Date对象输出格式进行格式化的方法与比较生日大小的方法,使用Comparable接口进行比较,覆写比较方法
- 若使用Comparator接口,覆写equals方法与比较方法
- 创建测试类,实例化员工类的对象数组,实例化Date类的对象,对员工及其经理与比较结果进行输出
-
问题1:
- 在员工类写了格式化的方法,在测试类不能进行格式化后的数据输出
- 比较生日时,不知道怎么进行比较
-
原因:
- 没有真正对SimpleDateFormat类的方法进行理解,不能灵活使用
- 比较生日时,不会使用getTime()方法
-
解决方案:
- 在Employee类中,写格式化的方法,覆写toString方法时,把date类的对象调用此方法进行输出,在测试类里,对Employee对象数组实例化时,进行格式化
- 比较生日时,传的参数是Date类的对象,对象.getTime()就可以对生日进行比较
3.宠物商店
-
程序设计思路:
- 创建Pet接口,定义抽象方法
- 创建Dog类与Cat类,覆写Pet的方法
- 创建PetShop类,对题目要求的功能进行实现
- 创建测试类,对功能进行合理化实现并有逻辑进行退出程序
-
问题1:
- 对于PetShop程序的功能实现与测试类的参考了书中的实例,并且同时请教了赵健宇同学,他讲解了他实现此程序功能的思路,我对其思路进行了实现,并且在此基础上进行了一些改进
-
原因:
- 对于此程序中购买宠物的部分不能有个清楚的思路
-
解决方案:
- 需要对书中的实例进行深刻理解,明白每个变量属性的实际意义
三 .代码托管
- 码云commit历史截图
四 .学习进度条
进程 | 代码行数(新增/累积) | 学习时间(新增/累积) | 本周学习内容 |
---|---|---|---|
目标 | 5000行 | 300小时 | |
第2-4周 | 500/500 | 45/45 | 自学了前四章的内容,自己练习了学习过程中的所有代码,并写了一些练习题提交到了码云中 |
第5周 | 200/700 | 15/55 | 学习了老师要求的内容 |
第6周 | 300/1000 | 15/70 | 学习了作业中要求的内容 |
第7-8周 | 200/1200 | 15/85 | 掌握了本次学习的全部内容 |
第9周 | 300/1500 | 10/95 | 掌握了本次学习的内容 |