正文
20182311 2019-2020-1 《数据结构与面向对象程序设计》第6周学习总结 |
教材学习内容总结
教材第九章
1.多态与后绑定:多态是指一个引用变量在不同时刻指向不同对象。多态实现的基础是后绑定(late/dynamic binding),即运行时才确定对象和方法。对象的类型,而不是引用的类型决定绑定哪个方法。
2.通过继承实现多态:指向某个类的引用变量,可以指向这个类及继承于他的任意子类的任何对象。可以把父类对象赋给子类引用,但需要进行显示转换(类型强转),而且可能出现问题。
3.接口:一组抽象方法。接口可以多重继承。
4.接口实现多态:接口名可用来声明引用变量。调用接口变量时只能调用接口中定义的方法,因为编译器只能判定对象是接口类的,子类自定义的方法无法响应。
教材第十章
1.异常与异常处理:
- 异常是一个对象,与错误类似。异常能被抛出、捕获,必要时进行处理。
- 异常处理三种方式:
- 不处理:程序非正常终止,打印错误信息和调用栈跟踪
- 在异常产生的地方处理:捕捉异常-try catch
- 在程序的其他地方处理:抛出异常-throws throw
2.try catch语句:
- try语句中出现异常,直接转向与第一个异常匹配的catch子句。执行完子句中的语句后,控制转向try-catch之后的语句,try中部分语句可能未被执行。
- finally:不管是否出现异常,都会被执行。
3.异常传播:如果没有在异常产生的地方捕获及处理他,异常将会传播给调用的方法,直到得到处理或程序非正常退出。
4.异常类的层次:继承关系可以跨越包的边界。异常的高层类定义在java.lang包,众多子类在其他包中。我们可以通过继承Exception及其派生类定义一个新的异常。
5.免检异常与必检异常:只有RuntimeException及其后代类对象是免检异常,不需要throws子句。
6.I/O异常
教材学习中的问题和解决过程
-
问题1:怎么理解“抛出”异常这个概念?
-
问题1解决方案:一个方法没有能力处理异常,将其从调用层次向上传递,谁调用这个方法,这个异常就由谁来处理。相当于“有问题找家长”的责任转移。异常必须被处理,要么捕获要么抛出。若是在主函数内抛出异常,并且没有try catch,将直接导致程序的中断,因为主函数是调用层次的最高一级,异常不会被捕获。
-
问题2:throws和throw关键字的作用?区别?
-
问题2解决方案:
- 使用throws声明的方法表示此方法不处理异常,而由系统自动将所捕获的异常信息“抛给”上级调用方法。使用throws声明能实例化异常类对象,人为抛出异常。
- throw 在方法体内使用,throws 函数名后或者参数列表后方法体前。
- throw 强调动作,而throws 表示一种倾向、可能但不一定实际发生。
代码调试中的问题和解决过程
-
问题1:将使用split方法切割后的字符串返回值赋给一个数组,超出数组初始化容量,但并未出现IndexOutOfBoundsException.
-
问题1解决方案:一开始感到很奇怪,因为书上写数组length一旦确定不能改变,后来有看到对象数组里可以自己定义私有方法实现扩容。但这个问题的原因在于,使用split()切割后返回的值是arraylist格式的,Java中arraylist具有自动扩容的功能,所以永远不用担心容量问题。
-
问题2:如何实现try catch的无限循环?
-
在try catch外一层设置无限循环,使用一个布尔数控制循环的终止。当程序捕捉到格式错误时把布尔数改为false,直到输对改为true,跳出循环。
-
问题3:PP9_3中需要用到加密算法,发现上一次对RSA加密算法过程不是很清楚,导致修改代码的时候丢三落四。
-
问题3解决方案:重新理解了RAS的加密过程。由A生成一对公钥和私钥,A将公钥发给B,B用公钥对信息加密传给A,A用私钥解密。若A需要进行回复,用私钥加签形成签名与消息一起传给B,B用公钥验签。
- 公钥公开透明,私钥私有
- 加密防信息泄露,签名防假冒抵赖
- 公钥和私钥是成对存在,可以互相用来加解密
- 总结:公钥加密、私钥解密、私钥签名、公钥验签。
-
问题4:如何实现排序?Compareto实现排序的机制?
-
问题4解决方案:数组和列表均可以实现排序。Arrays.sort()和Collections.sort(),根据需要选择。需要注意的是,使用该方法需要重写一个的、Compareto方法,该方法的类要继承于comparable接口。
-
机制:调用Arrays.sort()最后会通过Comparable接口的compareTo()对数组进行比较排序。return 1、-1、0,可以分别理解为,顺序后移、前移和不变。
代码托管
上周考试错题总结
- 错题1:Which of the following is true regarding Java classes?
A .All classes must have 1 parent but may have any number of children (derived or extended) classes
B .All classes must have 1 child (derived or extended) class but may have any number of parent classes
C .All classes must have 1 parent class and may have a single child (derived or extended) class
D .All classes can have any number (0 or more) of parent classes and any number of children (derived or extended) classes
E .All classes can have either 0 or 1 parent class and any number of children (derived or extended) classes - 反思:正确答案:A。所有的类都直接或间接继承于Object类,所以每个类一定有一个父类。子类数量不限。
- 错题2:Using the reserved word, super, one can
A .access a parent class'constructor(s)
B .access a parent class'methods and instance data
C .access a child class'constructor(s)
D .access a child class'methods and instance data
E .none of the above - 反思:正确答案:正确答案:E。答案应该是AB的组合,而不是B,所以哪个都不正确。
- 错题3:Interface classes cannot be extended but classes that implement interfaces can be extended.
A .true
B .false - 反思:正确答案:B。错误理解了继承和实例化的概念。任何类都可以被继承,无论是接口、实现接口还是抽象类,只有被final过的不能被拓展改变。
结对及互评
点评过的同学博客和代码
- 本周结对学习情况
感悟
感觉还是学得太表面了,深层次的算法啥的都还没学。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 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 | |
第五周 | 849/2822 | 2/10 | 20/120 | |
第六周 | 962/ 3784 | 2/12 | 30/150 |