• 20182311 2019-2020-1 《数据结构与面向对象程序设计》第4周学习总结


    正文

    20182311 2019-2020-1 《数据结构与面向对象程序设计》第4周学习总结

    教材学习内容总结

    教材4.8.1及第五章

    1. 迭代器和for循环
    2. 类和对象:子类与父类;继承。声明一个类不会分配内存空间,只有实例化对象才会分配空间。目前已知两种调用类的方法,通过实例化的对象调用,静态方法直接使用类名调用方法。
    3. 可见性修饰符:private、protected、public。protected可以保证父类的实例变量私有而能被子类继承,提供了继承之间最恰当的封装机制。
    4. UML类图
    5. 静态方法与静态类:静态类不能调用非静态变量。静态变量由类中所有实例共享,改变一个类中的静态变量相当于修改了所有类中该静态变量的值。
    6. 类关系:依赖、聚合(has-a)。

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

    • 问题1:删去调用对象的类内的toString方法,使用Println方法也能产生。
    • 问题1解决方案:所有类都直接或间接从Object类中衍生,Obeject中含有toString()方法被所有子类继承。但是直接用println(object)打印出来的字符串只有对象名和一些奇怪的数字。一般根据自身需求对toString进行override。
    • 问题2:怎样理解接口?抽象类与接口的区别?
    • 问题2解决方案:理解:接口是由一组抽象方法组成。
      • 接口不能含有方法体,抽象类可以做方法实现。
      • 接口只能使用静态常量,抽象类可有正常变量。
      • 接口必须被类实现(implements),抽象类必须被子类继承(extends)
      • 抽象类是抽象类别,接口是抽象功能。
      • 一个类只能有一个继承关系,但可以有多个接口。java单继承,但接口可以继承多个接口。
      • 接口中的抽象方法可以缺省abstract,抽象类中抽象方法不可省。
    • 问题3:抽象类与抽象方法的关系?为啥要抽象类?
    • 问题3解决方案:含有抽象方法的类必须被声明为抽象类,抽象类可以不含有抽象方法。和接口类一样,抽象类不能实例化。抽象类是顶层的设计。

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

    • 问题1:count虽然已经有定义,但是在上一个方法中的局部变量,为啥会报错?

    • 问题1解决方案:漏了一个大括号导致变量作用于改变,本身理解没有问题。

    • 问题2:先使用遍历完一遍数组,再使用迭代器遍历数组,发生Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 2(数组越界异常),且只有一次输出。

    • 问题2解决方案:把迭代器和数组遍历顺序调换发现有了两次输出,应该是迭代器的原理及用法问题。

    • 迭代器原理:迭代器的原理是用指针指向数组,首先用hasNext()判断是否有下一个元素(程序中应该直接在这里返回false退出了方法),再用next将指针挪至下一个位置。

    • for循环内部其实也是调用iterator遍历的。但是调换顺序后结果变化应该是进行for循环前虽然指针已经指向数组最后一位,但是for的循环初始条件再一次将指针调制初始位置。

    • 问题3:枚举类型不能是数字?

    • 问题3解决方案:枚举类型也是一种类,不能用数组来理解。1,2,3,包括单字符是一种数据类型,不是对象也不是变量,不能用字面常量来定义枚举类型,他们不能被赋值。

    代码托管

    上周考试错题总结

    • 错题1:Which of the following is true regarding the mod operator, %? (关于求余运算符%,下面哪项是正确的?)
      A .It can only be performed on int values and its result is a double
      B .It can only be performed on int values and its result is an int
      C .It can only be performed on float or double values and its result is an int
      D .It can only be performed on float or double values and its result is a double
      E .It can be performed on any numeric values, and the result always is numeric
    • 反思:正确答案:E。尽管通常使用整数值,但%运算符可以用于所有类型的数字数据。
    • 错题2:Which properties are true of String objects?
      A .Their lengths never change
      B .The shortest string has zero length
      C .Individual characters within a String may be changed using the replace method
      D .The index of the first character in a string is one
      E .Only A and B are true
    • 反思:正确答案:E。字符串一旦创立,不可改变,长度可以为0。调用replace方法不是改变原有的字符串,而是在原有字符串的基础上修改并把加过存入一个新的字符串。
    • 错题3:What happens if you attempt to use a variable before it has been initialized?
      A .A syntax error may be generated by the compiler
      B .A runtime error may occur during execution
      C .A "garbage" or "uninitialized" value will be used in the computation
      D .A value of zero is used if a variable has not been initialized
      E .Answers A and B are correct
    • 反思:正确答案:E。很多时候编译器能够检测未初始化变量的尝试使用,在这种情况下它会产生语法错误。如果使用编译器的逃逸检测,则使用时会出现运行时错误。
    • 错题4:The String class' compareTo method
      A .compares two string in a case-independent manner
      B .yields true or false
      C .yields 0 if the two strings are identical
      D .returns 1 if the first string comes lexically before the second string
      E .none of the above
    • 反思:正确答案:C。两个字符串相等输出0,第一个在第二个字符串之前输出-1,否则就输出+1。

    结对及互评

    点评过的同学博客和代码

    感悟

    我发现一个快速学习的方法,先去看一堆看不懂的代码,然后再带着问题看书,这样知识点会留下更深的印象,也更有侧重性。不懂的地方不要随便相信书或者别人的博客,自己打一遍还能加深印象。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 10000行 30篇 400小时
    第一周 246/246 2/2 30/30 初步掌握linux命令、java小程序和jdb调试
    第二周 73/319 3/3 30/60
    第三周 906/1225 3/6 20/80
    第四周 748/1973 2/8 20/100

    参考资料

  • 相关阅读:
    Samba.conf案例 Ubuntu
    samba服務器下文件夾chmod權限技巧
    华为AR1220
    vsftpd.conf案例
    FTP指令说明
    Ubuntu 16.04 LTS 搭建LAMP
    记录踩过的坑——代理IP
    重写验证时重定向
    顶级页面
    文件中用WriteLine追加内容的两种方法
  • 原文地址:https://www.cnblogs.com/lengchong/p/11614535.html
Copyright © 2020-2023  润新知