20172313 2017-2018-2 《程序设计与数据结构》第九周学习总结

20172313 2017-2018-2 《程序设计与数据结构》第九周学习总结

教材学习内容总结

  1. 初步学习异常,了解异常和错误的区别。
  2. 异常处理的几种方法。
  3. 如果程序不处理异常,则将非正常地终止执行,并产生关于描述在何处发生什么异常的信息。
  4. 可以用“try-catch”语句对抛出的异常进行捕获,后可以有一个可选的finally语句。
  5. 如果在一个异常的发生处没有捕获和处理该异常,控制将立刻返回到产生该异常的方法的上一级调用方法。
  6. 可以从Exception类或它的后代类派生一个新类来定义自己的异常。
  7. 异常分为可检测异常与不可检测异常。
  8. 初步学习I/O流的部分内容和I/O异常。
  9. 初步学习递归思想,了解递归的定义包括非递归定义和递归定义两部分。
  10. 学习直接递归和间接递归,并通过几个示例来加深理解,初步利用递归思想进行递归编程。

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

  • 问题1:在学习I/O流的时候,提到过BUfferedInputStream能提高读取速率额,在查询了API后,上面有这样一句解释创建一个内部缓冲区数组。在读取或跳过流中的字节时,可根据需要从包含的输入流再次填充该内部缓冲区。 但还是不太理解能加快读取速率的原理到底是什么。
  • 问题1解决方案:在查询了资料以后,有了一定的理解。首先要理解缓冲区的概念:一片内存存储空间,在读写数据的程序需要之前,数据存储在这里,这样就不用每次去物理硬盘上的数据源取了。 而缓冲输入流(BufferedInputStream)又是什么呢?
  • 缓冲输入流(BufferedInputStream):顾名思义,是在缓冲区取数据的输入流(InputStream)。输入流都是在硬盘数据源去数据的。要从缓冲区取数据,那缓冲区里面要有数据的,对吧?谁写进去呢?当然是输入流(InputStream)了,所以要建立缓冲输入流(BufferedInputStream),必须指定一个输入流。

  • 问题2:刚开始学习异常处理的时候,不是很明白为什么可以对异常根本不进行处理,异常既然是程序中出现的问题或非正常情况,不进行处理不会导致程序出错吗?
  • 问题2解决方案:对于不可检测的异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。
运行时异常:都是RuntimeException类及其子类异常,如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。运行时异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。
非运行时异常 (编译异常):是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常,一般情况下不自定义检查异常。

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

  • 问题1:在做编程项目pp11_2的时候,对抛出的异常进行捕捉,但IEDA提示我的代码错误,按照提示进行修改的话会自动把我的“try-catch”语句给删掉。

  • 问题1解决方案:我是按照书上的例题写的,语法上不应该存在错误才对。我仔细思考了一下找到了问题所在,书上的例题抛出的异常是设定好的,而我的代码中的异常是自己定义的,所以在运行的时候不知道是什么时候抛出异常,对代码修改如下,问题就得以解决了。

  • 问题2:在做编程项目pp12_1的时候,对代码进行编译运行,提示我超出了索引的范围。

  • 问题2解决方案:利用Debug对错误进行排除发现是自己把右边的索引范围给写错了(。ŏ_ŏ),改过之后也就没什么问题了~

代码托管

上周考试错题总结

  • 错题1: Can a program exhibit polymorphism if it only implements early binding?
    A . Yes, because one form of polymorphism is overloading
    B . No, because without late binding polymorphism cannot be supported
    C . Yes, because so long as the programs uses inheritance and/or interfaces it supports polymorphism
    D . Yes, because early binding has nothing to do with polymorphism
    E . none of the above
  • 解析:虽然继承和接口支持多态,但只有在具有后期绑定时才会这样做。 但是,重载是多态的一种形式(方法)名称,多个主体,只要程序使用重载,多态就在使用中。
  • 错误原因:课本上和其他资料上的定义不太一致,有些资料上把方法重载也当做一种多态的实现。
  • 错题2: A class reference can refer to any object of any class that descends from the class.
    A . true
    B . false
  • 解析:这是一种使用类名来声明引用变量的多态函数。
  • 错误原因:这就是对概念的理解不清了,以后记牢...

结对及互评

  • 博客中值得学习的或问题:
    • 排版精美,对于问题研究得很细致,解答也很周全。
  • 代码中值得学习的或问题:
    • 代码写的很规范,思路很清晰,继续加油!

点评过的同学博客和代码

  • 本周结对学习情况

其他

我从不觉得不忘初心本以是要人努力不放弃,而是要坚守本心,不要忘记当初是为什么开始,才能得到最终想要的结果。
If you want to feel secure,
do what you already know how to do.
But if you want to grow,
go to the cutting edge of your competence,
which means a temporary loss of security.
So… whenever you dont quite know you are doing.
Know that you are growing.

若想要感觉安全无虞,去做你本来就会做的事,
若想要真正成长,那就要挑战能力的极限,
也就是暂时地失去安全感。
所以……当你不能确定自己在做什么时,
起码要知道,你在成长。
— Mark Twain

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 126 1/1 20/20
第二周 388/466 1/2 15/35
第三周 706/1162 1/3 17/52
第四周 1104/2266 1/4 20/72
第五周 1126/3392 1/5 15/87
第六周 906/4298 1/6 20/107
第七周 1233/5531 1/7 20/127
第八周 1391/6922 1/8 24/151
第九周 420/7342 1/9 20/171
  • 计划学习时间:20小时

  • 实际学习时间:20小时

  • 改进情况:
    看到周围的同学都在认真的学习Java,自己在其中也受到了一些感染,这周对Java的学习自我感觉良好,这周所学习的课本上的内容不算太难,难的是利用递归思想来独自完成一些递归编程,在这周的测验和课下的代码编写中也体现出来了一些问题,还是存在着考虑不到位,编写代码时不细心等问题。对有些概念的理解混淆依然存在,希望能在以后的学习生活中改正这些错误,弥补这些问题,能够继续进步。

参考资料

posted @ 2018-05-12 19:57  银海、  阅读(309)  评论(4编辑  收藏  举报