代码改变世界

20182327 2019-2020-1 《数据结构与面向对象程序设计》第六周学习总结

2019-10-15 17:28  BBIowa  阅读(218)  评论(1编辑  收藏  举报

20182327 2019-2020-1 《数据结构与面向对象程序设计》第六周学习总结

教材学习内容总结

  • 1、多态与后绑定:多态是指一个引用变量在不同时刻指向不同对象。多态实现的基础是后绑定(late/dynamic binding)
    多态存在的三个必要条件
    继承
    重写:是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都无法改变。

  • 2、.接口:一组抽象方法。接口可以多重继承。

  • 3、接口实现多态:接口名可用来声明引用变量。调用接口变量时只能调用接口中定义的方法,因为编译器只能判定对象是接口类的,子类自定义的方法无法响应。

  • 4、异常与异常处理:

    • 异常是一个对象,与错误类似。异常能被抛出、捕获,必要时进行处理。
    • 异常处理三种方式:
      不处理:程序非正常终止,打印错误信息和调用栈跟踪
      在异常产生的地方处理:捕捉异常-try catch
      在程序的其他地方处理:抛出异常-throws throw
  • 5、I/O异常(其中还有老师上课讲的把数据写入文本,和从文本中读取数据内容)
    三种标准I/O流(in、out、err)
    可检测的IOExceptions异常

教材学习中的问题和解决过程

  • 问题1:throws和throw关键字有什么区别?

  • 解答:
    1、使用throws声明的方法表示此方法不处理异常,而由系统自动将所捕获的异常信息“抛给”上级调用方法。使用throws声明能实例化异常类对象,人为抛出异常。

    • throw 在方法体内使用,throws 函数名后或者参数列表后方法体前。
    • throw 强调动作,而throws 表示一种倾向、可能但不一定实际发生。
  • 问题2:接口可以实现接口吗?

  • 问题2解决方案:不能实现接口,因接口的成员方法都具有抽象属性,不具有方法体,无法实现继承的接口。

    • 具体如何实现没有研究。

代码调试中的问题和解决过程

  • 问题一:如何达到题目要求“直到输入“DONE”为止”?

  • 问题一解决方法:这个问题出现是因为我理解题目出现了问题,检测到输入得单词为“DONE”就停止,然后判断总输入字符串是否超过长度20个,如果是,就抛出异常。无异常的话可以再次输入。

  • 问题二:IO操作及异常处理

  • 问题二解决方法:刚听完IO的问题要尝试去编写IO的代码,对应的writer和reader什么的不了解,不过可以参考参考学长学姐的代码。代码中有BufferedOutputStream和BufferedInputStream两种可供理解,两种字节流可以使用,进行往文件里面写入读出。

  • 问题三:读取文件时遇到了空格,在I/O异常练习时,遇到了读文件的操作,但读取时遇到空格。

  • 问题三解决办法:最后找到string.split方法,以某一特殊符为界,分割字符串后将每一部分存入数组。

代码托管

(statistics.sh脚本的运行结果截图)

上周考试错题总结

  • 错题1:A Java program can handle an exception in several different ways. Which of the following is not a way that a Java program could handle an exception?
    A . ignore the exception
    B . handle the exception where it arose using try and catch statements
    C . propagate the exception to another method where it can be handled
    D . throw the exception to a pre-defined Exception class to be handled
    E . all of the above are ways that a Java program could handle an exception
    错误:D 正确:E
    解析:java处理异常的三种方式:1.根本不处理异常。2.当异常发生时处理异常。3.在程序的某个位置集中处理异常。

  • 错题2:An exception can produce a "call stack trace" which lists:
    A . the active methods in the order that they were invoked
    B . the active methods in the opposite order that they were invoked
    C . the values of all instance data of the object where the exception was raised
    D . the values of all instance data of the object where the exception was raised and all local variables and parameters of the method where the exception was raised
    E . the name of the exception thrown
    错误:D 正确:B
    解析:调用

  • 错题3:An exception that could also arise in the try statement that does not have an associated catch statement is:
    A . ClassNotFoundException
    B . IllegalArgumentException
    C . NegativeArraySizeException
    D . NullPointException
    E . OutOfMemoryException
    错误:A 正确:D
    解析:try语句后没有catch语句会出现NullPointException

  • 错题4:We compare sorting algorithms by examining
    A the number of instructions executed by the sorting algorithm
    B the number of instructions in the algorithm itself (its length)
    C the types of loops used in the sorting algorithm
    D the amount of memory space required by the algorithm
    E whether the resulting array is completely sorted or only partially sorted
    分析:这道题考到的知识点为:不同的排序算法在执行时需要不同数量的指令。所以我们通过检查排序算法执行的指令数,来比较排序算法。所以应该选a。

  • 错题5:Polymorphism is achieved by
    A . overloading(重载)
    B . overriding(重写)
    C . embedding(嵌入)
    D . abstraction(抽象)
    E . encapsulation(封装)
    分析:这道题考查的是多态性是通过什么实现,我选择的是的抽象,而答案是b重写:重写提供了多态性,因为适当的方法是根据当前被引用的对象而调用的,所以应该是重写实现多态性。

  • 错题6: All run-time Errors throw Exceptions.
    正确答案:B.false
    原因:结果显而易见,如果我们用try-catch语句就可以不抛出了。

  • 错题7:A try statement must have at least one catch statement, but could have many catch statements, and may or may not have a finally clause.
    正确答案:A.true
    原因:点错了,使用try之后必须要有至少一个catch,至少在IDEA中如果没有接下来的catch就会出现红线提示,finally是可有可无的,有需求就可以用。

结对及互评

评分标准

  1. 正确使用Markdown语法(加1分):

    • 不使用Markdown不加分
    • 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
    • 排版混乱的不加分
  2. 模板中的要素齐全(加1分)

    • 缺少“教材学习中的问题和解决过程”的不加分
    • 缺少“代码调试中的问题和解决过程”的不加分
    • 代码托管不能打开的不加分
    • 缺少“结对及互评”的不能打开的不加分
    • 缺少“上周考试错题总结”的不能加分
    • 缺少“进度条”的不能加分
    • 缺少“参考资料”的不能加分
  3. 教材学习中的问题和解决过程, 一个问题加1分

  4. 代码调试中的问题和解决过程, 一个问题加1分

  5. 本周有效代码超过300分行的(加2分)

    • 一周提交次数少于20次的不加分
  6. 其他加分:

    • 周五前发博客的加1分
    • 感想,体会不假大空的加1分
    • 排版精美的加一分
    • 进度条中记录学习时间与改进情况的加1分
    • 有动手写新代码的加1分
    • 课后选择题有验证的加1分
    • 代码Commit Message规范的加1分
    • 错题学习深入的加1分
    • 点评认真,能指出博客和代码中的问题的加1分
    • 结对学习情况真实可信的加1分
  7. 扣分:

    • 有抄袭的扣至0分
    • 代码作弊的扣至0分
    • 迟交作业的扣至0分

点评模板:

  • 博客中值得学习的或问题:

    • 同学们已经有意识的遇见错误就截图,给后面写博客的各种方便很多,我一直忘记只能重新敲一遍。
  • 代码中值得学习的或问题:

    • 条条大路通罗马,好多同学可以曲线思维弄出代码,听他们讲解后真的很佩服。
  • 基于评分标准,我给本博客打分:11分。得分情况如下:正确使用Markdown语法+1.教材学习中的问题和解决过程+2.代码调试中的问题和解决过程+2.感想,体会不假大空+1.错题学习深入+1.点评认真,能指出博客和代码中的问题+1.结对学习情况真实可信+1.课后题有验证+1,进度条有记录+1.

  • 参考示例

点评过的同学博客和代码

  • 本周结对学习情况

  • 上周博客互评情况

其他(感悟、思考等,可选)

  • 每节课的考试让我十分吃不消,不只是英语单方面的问题,Java也有许多问题亟待解决,因为课本版本不同,找起知识点来比较麻烦。
  • 好多同学好牛,自己好菜,各种把打好的代码推翻重来,参考别人代码改来改去把自己的程序变成了四不像,运行不了,本周更加熟悉了运行一个目的堆了四五个程序的Java常态,继续虚心学习吧。
  • 实验作业越来越难,我越来越菜,随时gk。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 200/200 2/2 20/20
第二周 350/500 2/4 24/38
第三周 512/1000 3/7 22/60
第四周 1158/1300 4/9 35/90
第五周 2905/3000 6/5 24/24
第六周 3927/4000 2/2 26/30

参考资料