20182307 2019-2020-1 《数据结构与面向对象程序设计》第六周学习总结
20182307 2019-2020-1 《数据结构与面向对象程序设计》第六周学习总结
教材学习内容总结
- 第九章 多态 介绍了面向对象程序设计三要素的最后一个要素:多态。它是指一个在不同时刻可以指向不同类型对象的引用变量。本章分别介绍了用继承、接口实现多态,也进一步深化了继承和接口的知识概念体系。
- 第十章 异常 主要对于Java程序中出现的错误和异常进行了讨论。分别介绍了异常的主要种类、异常的处理方式、try-catch语句、异常的传播等知识。
学习笔记:
- 后绑定
- 引用变量的类型要与它所指的对象的类完全匹配
- 绑定直到运行时才确定下来,这个延迟的提交称为后绑定
- 可以使用两种方法创建多态引用:继承与接口
- 用继承实现多态
- 引用变量可以指向声明继承于它的任意类的任何对象
- 对象的类型决定调用的是方法的哪个版本
- 接口
- 接口是一组抽象方法,不能被实例化
- 实现接口:一个类给出了接口中定义的每个抽象方法的实现
- 实现接口的类在类头使用保留字implements
- 多个类可以实现同一个接口
- 一个类可以实现多个接口
- 接口层次
- 继承可用于接口,所以一个接口可派生于另一个接口
- 实现子接口的任何一个类必须实现所有的方法
- 接口中的所有成员都是公有的
- Iterator接口
- 用来表示类的一组对象,提供一种从头至尾每次访问一个对象的机制
- hasNext返回一个布尔结果;next返回一个对象
- 用接口实现多态
- 接口名可用来声明对象引用变量
- 接口引用可以指向实现这个接口的任意类的任何对象
- 方法参数可以是多态的
- 一个异常是一个对象
- 常见异常:
异常原因 | 报错 |
---|---|
试图被0除 | ArithmeticException |
数组下标越界 | ArrayIndexOutOfBoundsException |
没有找到指定的文件 | FileNotFoundException |
请求的I/O操作没能正常执行 | IOException |
试图访问空引用所指的对象 | NullPointerException |
试图执行一个违反某安全措施的操作 | SecturityException |
- 处理异常
- 不处理异常
- 在异常发生的地方处理
- 在程序的其他地方处理异常
- try-catch语句
- 一个try块可以有几个catch语句
- 执行try块期间无论在哪里出现异常,控制将立即转向对应的catch处理器
- 无论以何种方法退出try块时都要执行finally子句
- 异常传播
- 若在发生异常的方法内没有捕获并处理它,控制立即转向产生异常的这个方法的调用方法;异常会这样一直被传播,直到捕获并处理它,或是传出main方法,后者将导致程序中断
- 必检异常和免检异常
- 必检异常必须被一个方法捕获,或者必须列在抛出它或传播它的任意方法的throws子句中;只有RuntimeException或其后代类的对象才是免检异常
教材学习中的问题和解决过程
- 问题1:多态的引用过程究竟是什么样的?
- 书本内容:多态引用在运行时才将方法调用与它的定义绑定在一起
- 个人理解:多态,顾名思义,是具有多种形态的,它在履行不同职责的时候会变化为不同的态。也就是说当运行到某一句调用方法的语句时,多态引用会根据该对象的类型来决定调用方法的版本
- 问题2:什么是流?
- 书本内容:流是字节的顺序序列,它可以用做输入源或是输出的目的地,流既可以看作是从中读出信息的输入流,也可以看成是写入信息的输出流
- 个人理解:流的存在意义,就是让数据可以快速地传递到另一个指定的地点,它就像数据在程序和外部设备的固定单向管道, 连接着输入和输出两端,通过占据一定的内存每次传输一定的数据信息
- 问题3:缓存到底是什么?
- 网络资料Buffer与Cache的区别
- 个人理解:Buffer的核心作用是用来缓冲,缓和冲击。比如一个程序每秒要写100次硬盘,对系统冲击很大,浪费了大量时间在忙着处理开始写和结束写的操作上。用buffer暂存起来,变成每10秒写一次硬盘,对系统的冲击就会变小,写入效率提高的同时,极大缓和了冲击。
Cache的核心作用是加快取用的速度。比如一个很复杂的计算做完了,下次还要用结果,就把结果放手边一个好拿的地方存着,下次不用再算了。加快了数据取用的速度。
代码调试中的问题和解决过程
-
问题1:inputStream.available()在循环判断中与显示不符,显示可读字符仍为1>0,但循环就跳出了
- 原因分析:在while语句中,inputStream.available()优先级先于关系单目运算符
> < >= <= == !=
,所以a的值在循环判断语句中先执行了一次,变为了0,从而跳出了循环 - 解决方案:尝试用输出语句监控变量a的值的变化
- 原因分析:在while语句中,inputStream.available()优先级先于关系单目运算符
-
问题2:用BufferedOutputstream和BufferedInputStream先写好文件后读入,发现多输出了一次的文本
- 原因分析:while中的bufferedInputStream.read(buffer)直接就执行并读出了文本,循环体里再执行一次就会导致文本二次打印
- 解决方案:去除循环体,直接用bufferedInputStream.read(buffer)语句读出并打印
-
问题3:重写compareTo方法时,无法调用传入的对象参数的priority数值
- 原因分析:没有正确实例化传入的对象的类
- 解决方案:如下图
代码托管
上周考试错题总结(正确为蓝色,错误为红色)
错题1:
Aside from permitting inheritance, the visibility modifier protected is also used to
A .permit access to the protected item by any class defined in the same package
B .permit access to the protected item by any static class
C .permit access to the protected item by any parent class
D .ensure that the class can not throw a NullPointerException
E .define abstract elements of an interface
- 原因:没有好好看书!书上原话“保护可见性的变量或方法可由同一包中的任何类来访问”
- 理解情况:可见性修饰符protected被用于提供访问被保护的数据的权限,保护被限于当前类,同一包中的类和当前类的子类
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 10000行 | 30篇 | 400小时 | |
第一周 | 209/209 | 2/2 | 9/9 | |
第二、三周 | 290/499 | 2/4 | 18/28 | |
第四周 | 516/1015 | 2/6 | 22/50 | |
第五周 | 2981/3996 | 2/8 | 32/82 | |
第六周 | 1498/5494 | 2/10 | 20/102 |