• <Java>第五次作业


    Java第五次作业

    (一)学习总结

    1.在上周完成的思维导图基础上,补充本周的学习内容,对Java面向对象编程的知识点做一个全面的总结。

    参考资料: XMind

    2.汽车租赁公司,出租汽车种类有客车、货车和皮卡三种,每辆汽车除了具有编号、名称、租金三个基本属性之外,客车有载客量,货车有载货量,皮卡则同时具有载客量和载货量。用面向对象编程思想分析上述问题,将其表示成合适的类、抽象类或接口,说明设计思路并画出类图.

    工具:PowerDesigner
    参考教程:UML 简介
    设计思路:
    抽象类汽车租赁公司:属性有:编号();名称();租金();
    接口1:定义载货量方法:载货量();
    接口2:定义载客量方法:载客量();
    子类客车继承汽车租赁公司特有属性:载客量,继承接口2。
    子类货车继承汽车租赁公司特有属性:载货量,继承接口1。
    子类货车继承汽车租赁公司特有属性:载客量,载货量,继承接口1和2。

    3.阅读下面程序,分析代码是否能编译通过,如果不能,说明原因,并进行改正。如果能,列出运行结果`

     interface Animal{    
        void breathe();
        void run();
        void eat();
    }
    class Dog implements Animal{
        public void breathe(){
            System.out.println("I'm breathing");
        }
        void eat(){
            System.out.println("I'm eating");
        }
    }
    public class Test{
        public static void main(String[] args){
            Dog dog = new Dog();
            dog.breathe();
            dog.eat();
        }
    }
    

    代码中的Dog没有添加实现的方法, 接口的抽象方法虽然默认为public权限,但是实现接口的类中覆写的抽象方法必须写public应该改为:

    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() {
    }
    }
    public class Test{
    public static void main(String[] args){
        Dog dog = new Dog();
        dog.breathe();
        dog.eat();
    }
    }
    

    改之后运行结果为

     I'm breathing
     I'm eating
    

    4.运行下面的程序

    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 = 0;i < fruits.length;i++)
            {
                System.out.println(fruits[i]);
            }
        }
    }
    

    程序输出的结果是升序排序的。查看String 类的源码,说明是如何实现的?如果现在希望对输出的结果进行降序排序,该如何处理?修改上述代码,实现按照字母顺序逆序排序。
    查看String源码:

    public final class String implements java.io.Serializable, Comparable<String>, CharSequence {
     private final int offset;
     private final int count;
     public String() {
     this.offset = 0;
    this.count = 0;
    this.value = new char[0];
    }
    public String(String original) {
    int size = original.count;
    char[] originalValue = original.value;
    char[] v;
    if (originalValue.length > size) {
        int off = original.offset;
        v = Arrays.copyOfRange(originalValue, off, off+size);
    } else {
        v = originalValue;
    }
    this.offset = 0;
    this.count = size;
    this.value = v;
    }
    

    对源码的解释:
    写String类的有参构造时,定义String对象original,声明新数组originalValue,排序时,如果originalValue长度大于original调用的count,对originalValue排列,排列后数组给新数组v,否则将originalValue赋给另一个数组v,输出进行逆序输出
    修改后的代码为

    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.其他知识总结
    向上转型:静态方法可以直接用类名调用
    Object类:
    public Object()是构造方法;
    public booean equals(Object )

    obj)对象比较
    public String toString ();在检查程序或对对象打印时调用
    异常的捕获及处理
    异常可以用try...catch进行处理,也可以用try...catch...finaiiy进行处理,在try语句中捕捉异常,然后再catch种处理异常,finaiiy作为异常的统一出口,不管是否发生异常都要执行此段代码;throws用在方法声明处,表示本方法不处理异常;throw表示在方法中手工抛出一个异常类;自定义异常类时,只需要继承Exception类即可。

    (二)实验总结

    (1)某工厂生产各种音乐盒,客户无需知道音乐盒的制作过程,只需知道如何播放音乐盒即可。用简单工厂设计模式实现该过程:接口MusicBox具有方法play(),两个音乐盒类PianoBox,ViolinBox,MusicBoxFactory 产生MusicBox的实例。
    程序设计思路:创建一个抽象方法,然后创建两个类去继承他,为了避免过多的代码重复,设置一个工厂类,当类增加时,只改变工厂类.

    2.部门员工类
    程序设计思路:
    创建Dept类,存在编号,姓名的属性,与员工类进行联系,存在员工类的对象与对象数组
    创建员工类,存在编号,姓名,性别的属性,根据题目要求,增加Dept类
    在数组的调用方面还是会调用不过来,程序没有错误i,可是没有显示调用数组,
    解决的方法:利用捕获异常try -catch-final,捕获异常就是用try()语句中的代码可能会产生并抛弃一个或多个异常,catch语句是进行捕获时做相应的处理。final语句是为异常处理提供一个统一的出口。
    3.在案例宠物商店的基础上,实现以下功能:
    (1)展示所有宠物
    (2)购买宠物
    (3)显示购买清单
    设计思路:
    将动物类定义为抽象的类,类中的属性有颜色,年龄,价格,再定义猫和狗的类,猫和狗的类分别继承动物类并有各自的属性编号,瓶品种,再Pet类中将所有的宠物信息录入,用String类中的ToString输出所有宠物,在用户选择购买宠物中实现Custer类:属性:名字,购买的宠物,构造方法:无参构造方法和有参构造方法,各个属性的getter和setter方法,购买宠物存储的方法 public void addPet();购买的方法;统计购买的数量,价钱:count int,初始化方法:public void init(),显示购买的宠物狗的品种,数量,价钱合计,宠物猫的品种,数量,价钱合计,最后将两者的价钱合计加起来即为购买的宠物的总价钱。
    遇到的问题:
    思路中的数组的传参,价格的统计计算功能比较难实现,遇到的问题还很多,测试类中输出有错.

    (三)代码托管

    • 码云commit历史截图

    (四)学习进度条

    代码行数(新增/累积) 学习时间(新增/累积) 本周学习内容
    目标 5000行 300小时
    第2-4周 300/300 30/30 学习了....
    第59周 400/400 21/30
    第610周
  • 相关阅读:
    配置java环境变量
    编写Java中的第一个Java程序:HelloWorld(你好世界:问世)
    对Java的加载与执行的理解(理论比较重要)
    JDK、JRE、JVM三者之间的关系?
    Java语言的特性
    计算机编程语言发展史
    DRF解析器
    DRF分页组件
    DRF频率组件
    DRF权限组件
  • 原文地址:https://www.cnblogs.com/junjun137/p/6751649.html
Copyright © 2020-2023  润新知