《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 掌握了本次学习的内容

原文地址:https://www.cnblogs.com/Melody-529/p/6746113.html