• 20155330 2016-2017-2 《Java程序设计》第四周学习总结


    20155330 2016-2017-2 《Java程序设计》第四周学习总结

    教材学习内容总结

    学习目标

    1. 理解封装、继承、多态的关系
    2. 理解抽象类与接口的区别
    3. 掌握S.O.L.I.D原则
    4. 了解模式和设计模式
    5. 能正确覆盖方法
    6. 了解垃圾回收机制
    7. 掌握Object类
    8. 掌握enum

    第六章 章节主要内容

    小结

    • 继承是指避免多个类间重复定义共同行为。

    • 继承的好处1:再更改名称时,只需修改父类名称,继承父类的子类均无需修改。(需注意的是private成员同样会被继承,但子类无法直接存取,必须通过父类提供的方法来存取(在父类愿意提供访问方法的前提下。))

    • Java中,子类只能继承一个父类,继承除了避免类间重复的行为定义,子类和父类间还会有is-a的关系。A(子类) 继承了B(父类),则表示为A(子类) is a B(父类)

    • 多态是指使用单一接口操作多种类型的对象。Java以继承及界面来实现多态。

    • abstract可标示方法为抽象方法,该方法不用撰写{}区块,直接使用; 结束即可。

    • 权限关键字与范围

      关键字 类内部 相同包类 不同包类
      public 可存取 可存取 可存取
      protected 可存取 可存取 子类可存取
      可存取 可存取 不可存取
      private 可存取 不可存取 不可存取
    • 重新定义方法对于父类中的方法权限只能扩大不能缩小。

    • instanceOf运算符用来判断对象是否由某个类创建,左操作数是对象,右操作数是类。

    第七章 章节主要内容

    小结

    • 接口可以用于定义行为但不定义操作。
    • 类要操作接口,必须使用impements 关键字。
    • 操作某接口时有两种处理方式:
      1. 操作接口中定义的方法
      2. 再度将该方法标示为abstract
    • 类与接口之间是实现关系,而且类可以继承一个类的同时实现多个接口,接口与接口之间可以有继承关系。
    • 可使用interface 来定义抽象的行为与外观,接口中的方法没有操作时,一定得是公开且抽象,此时可以省略public abstract
    • enum 语法可用于定义枚举常数。enum 定义了特殊的类,直接撰写程序继承Enum 类会被编译程序拒绝。
    • 在接口中枚举常数一定要使用= 指定值。 在类中定义枚举常数一定要明确写出public static final

    教材学习中的问题和解决过程

    • 问题1:abstract 抽象类、抽象方法如何使用?

    • 解决方案:

      1. abstract修饰类,会使这个类成为一个抽象类,这个类将不能生成对象实例,但可以做为对象变量声明的类型,也就是编译时类型,抽象类就像当于一类的半成品,需要子类继承并覆盖其中的抽象方法。

      2. abstract修饰方法,会使这个方法变成抽象方法,也就是只有声明(定义)而没有实现,实现部分以";"代替。需要子类继承实现(覆盖)。

      注意:有抽象方法的类一定是抽象类。但是抽象类中不一定都是抽象方法,也可以全是具体方法。

      1. abstract修饰符在修饰类时必须放在类名前。

      2. abstract修饰方法就是要求其子类覆盖(实现)这个方法。调用时可以以多态方式调用子类覆盖(实现)后的方法,也就是说抽象方法必须在其子类中实现,除非子类本身也是抽象类。

      注意:父类是抽象类,其中有抽象方法,那么子类继承父类,并把父类中的所有抽象方法都实现(覆盖)了,子类才有创建对象的实例的能力,否则子类也必须是抽象类。抽象类中可以有构造方法,是子类在构造子类对象时需要调用的父类(抽象类)的构造方法。

    • 问题2:JVM的垃圾收集机制中什么时候会触发一个对象的回收?

    • 解决方案:根据搜索得知:

      1. 对象没有引用
      2. 作用域发生未捕获异常
      3. 程序在作用域正常执行完毕
      4. 程序执行了System.exit()
      5. 程序发生意外终止(被杀进程等)

    代码调试中的问题和解决过程

    • 问题1:
    • 解决方案:因为同一个java源文件中最多只能有一个声明为public的类,而书上的代码块均分别为独立的java源文件,所以在组合时忽略了这个问题。将除了RPG3模块的其他模块中声明为public的部分删除。
    • 问题2:
    • 解决方案:经过检查发现是由于主类中没有将Magician名称修所导致的问题。
    • 问题3:
    public class RPG4 {
        public static void main(String[] args) {
            SwordsMan4 swordsMan = new SwordsMan4();
            swordsMan.setName("Justin");
            swordsMan.setLevel(1);
            swordsMan.setBlood(200);
    
            Magician4 magician = new Magician4();
            magician.setName("Monica");
            magician.setLevel(1);
            magician.setBlood(100);
    
            drawFight(swordsMan);
            drawFight(magician);
        }
    
        static void drawFight(Role4 role) {
            System.out.print(role.getName());
            role.fight();
        }
    }
    

    内部类为何无法使用static?(提示为:inner classes cannot have static declarations/内部类不能具有静态声明)

    • 解决方案:因为内部类特殊,他被定向为是和成员变量,方法一样的外部类成员。内部类必须跟外部类实例相关联才能初始化,这是其特点之一,而静态成员是不需要实例就初始化的。如果一个非静态内部类有了静态成员,静态成员不依托于任何内部类实例,那结果也就是此内部类不需要外部类实例就初始化了变量,严重侵害了内部类的定向。

    代码托管

    • 代码提交过程截图:

    • 代码量截图:

    上周考试错题总结

    • 错题1:17. CH04 判断:Clothes [] c1; …; Clothes [] c2=Arrays.copyOf(c1,c1.length)是浅拷贝。(OK)
    • 理解情况:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。浅层复制仅仅复制所考虑的对象,而不复制它所引用的对象。
    • 错题2:29. CH05 填空:Java中成员方法中引用成员变量,要使用(this)关键字。
    • 理解情况:在Java中,this()代表了调用另一个构造函数,所以在成员方法中引用成员变量时,需要使用到this关键字。
    • 错题3:32. CH05 判断:Java中方法内可以定义类。(OK)
    • 理解情况:方法中不能直接定义方法,但可以在方法中定义类,类里面再定义方法。

    其他(感悟、思考等,可选)

    现在应该算Java刚入门没多久,在学习过程中产生的问题多是在输入代码时出现的语法错误,这点需要加以注意和改正。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 18篇 300小时
    第一周 15/15 1/1 15/15
    第二周 159/174 1/2 20/35
    第三周 414/588 1/3 18/53 了解了封装、对象
    第四周 461/1049 1/4 18/71
    • 计划学习时间:16小时

    • 实际学习时间:18小时

    • 改进情况:由于已经开学快一个月了,除了日常学习,学生工作也变得繁忙了起来。同时兼顾二者是需要一定的精力的,所以根据实际情况适当修改了学习时长。但相对之后的课程来说,这一周还算能够有充裕的时间来学习。

    参考资料

  • 相关阅读:
    (字符串)子串变位词
    反转链表 II
    翻转链表
    覆盖索引
    MySQL索引结构之Hash索引、full-text全文索引(面)
    MySQL索引结构之B+树索引(面)
    MYSQL 存储引擎(面)
    MySQL架构(面)
    如何在Linux Mint 20系统上安装Pip
    如何在CentOS 8系统服务器上安装Nginx
  • 原文地址:https://www.cnblogs.com/ashin-kl/p/6576767.html
Copyright © 2020-2023  润新知