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,但循环就跳出了
    1

    • 原因分析:在while语句中,inputStream.available()优先级先于关系单目运算符> < >= <= == != ,所以a的值在循环判断语句中先执行了一次,变为了0,从而跳出了循环
    • 解决方案:尝试用输出语句监控变量a的值的变化
      2
  • 问题2:用BufferedOutputstream和BufferedInputStream先写好文件后读入,发现多输出了一次的文本
    3

    • 原因分析:while中的bufferedInputStream.read(buffer)直接就执行并读出了文本,循环体里再执行一次就会导致文本二次打印
    • 解决方案:去除循环体,直接用bufferedInputStream.read(buffer)语句读出并打印
      4
  • 问题3:重写compareTo方法时,无法调用传入的对象参数的priority数值

    • 原因分析:没有正确实例化传入的对象的类
    • 解决方案:如下图
      6

代码托管

5

上周考试错题总结(正确为蓝色,错误为红色)

错题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

点评过的同学博客和代码

  • 本周结对学习情况

  • 结对学习内容
    - 封装三要素理解与应用
    - 多态引用的使用
    - 使用继承、接口实现多态
    - 自定义异常
    - 捕获异常

  • 上周博客互评情况

posted @ 2019-10-14 22:19  陆彦杰  阅读(181)  评论(2编辑  收藏  举报