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

参考资料

猜你喜欢

转载自www.cnblogs.com/lengchong/p/11614535.html