zoukankan      html  css  js  c++  java
  • 《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 掌握了本次学习的内容

  • 相关阅读:
    在ASP.NET GridView 中使用e.CommandArgument传递参数
    循环处理之while and do while
    MzTreeView(梅花雪)完全攻略
    FreeTextBox使用详解
    委托、线程的用法
    Master Theorem
    python jsonpath 语法总结
    python + zmail 邮件发送
    python的yaml语法
    unittest单元测试框架总结
  • 原文地址:https://www.cnblogs.com/Melody-529/p/6746113.html
Copyright © 2011-2022 走看看