20182311 2019-2020-1 《数据结构与面向对象程序设计》第4周学习总结
作者:互联网
目录
正文
20182311 2019-2020-1 《数据结构与面向对象程序设计》第4周学习总结 |
教材学习内容总结
教材4.8.1及第五章
- 迭代器和for循环
- 类和对象:子类与父类;继承。声明一个类不会分配内存空间,只有实例化对象才会分配空间。目前已知两种调用类的方法,通过实例化的对象调用,静态方法直接使用类名调用方法。
- 可见性修饰符:private、protected、public。protected可以保证父类的实例变量私有而能被子类继承,提供了继承之间最恰当的封装机制。
- UML类图
- 静态方法与静态类:静态类不能调用非静态变量。静态变量由类中所有实例共享,改变一个类中的静态变量相当于修改了所有类中该静态变量的值。
- 类关系:依赖、聚合(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 |
参考资料
标签:迭代,接口,问题,错题,2019,2020,20182311,方法,抽象类 来源: https://www.cnblogs.com/lengchong/p/11614535.html