《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 CASE_INSENSITIVE_ORDER
    = new CaseInsensitiveComparator();

    private static class CaseInsensitiveComparator
    implements Comparator, 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 掌握了本次学习的内容

posted @ 2017-04-21 21:28  Melody529  阅读(351)  评论(1)    收藏  举报