20172321 2017-2018-2 《程序设计与数据结构》第九次学习总结
教材学习内容总结
异常
- 异常处理
- 根本不处理异常
- 当异常发生时处理异常
- 在程序的某个位置集中处理异常
- 未捕获的异常
- 异常抛出时所输出的信息,提供了方法调用堆栈踪迹。
- try-catch语句和finally语句
- 没有异常,将继续执行try语句后的语句块,所有catch子句后的语句
- 有异常,则控制立刻转移到相应的catch子句处理异常
- 每个catch子句处理一种try语句块中抛出的异常
- 无论try语句块正常退出或由于抛出异常而退出,都将执行finally子句
- 如果有finally子句,则必须跟在所有的catch子句后面
- 异常的传递
- 如果一个异常的发生处没有捕获和处理该异常,则该异常将传递给上级调用方法
- 异常类层次结构
- 自定义异常:可由Exception类或它的后代类派生一个新类来定义一个异常
- 可检测异常必须由方法捕获,或者必须在可能抛出或传递异常方法的throws子句中列出来
- Java中唯一的不可检测异常是RuntimeExceptions类的对象或该类的后代类对象
- I/O异常
- 一个数据存储可以作为一个程序的输入流或输出流,但一般不能同时是
标准I/O流 | 说明 |
---|---|
System.in | 标准输入流 |
System.out | 标准输出流 |
System.err | 标准错误流(输出错误信息) |
递归
- 递归
- 递归是一种方法能够调用自己的编程技术
- 任何一个递归定义中必须有称为基本情况的非递归定义部分
- 递归编程
- 每一次对方法的递归调用,都会创建新的局部变量和参数
- 方法调用自己的递归为直接递归
- 一个方法调用其它方法,导致再次调用自己为间接递归
- 递归的应用
- 迷宫旅行
- 汉诺塔问题
教材学习中的问题和解决过程
- 问题1:可检测异常和不可检测异常的区别
- 问题1解决方案:可
- 检查的异常(checked exceptions),其必须被 try{}catch语句块所捕获,或者在方法签名里通过throws子句声明.可检查的异常必须在编译时被捕捉处理,命名为 Checked Exception 是因为Java编译器要进行检查,Java虚拟机也要进行检查,以确保这个规则得到遵守.
- 运行时异常(runtime exceptions),需要程序员自己分析代码决定是否捕获和处理,比如 空指针,被0除...
- 问题2:异常和错误的区别
- 问题2解决方案:
- Throwable类有两个子类,Error与 Exception。
错误与异常都是在程序编译和运行时出现的错误。不同的是,异常可以被开发人员捕捉和处理;而错误一般是系统错误,一般不需要开发人员处理(也无法处理),比如内存溢出。 - Exception是java中所有异常的基类。在java中异常被分为两大类,编译时异常和运行时异常。
- Error是java中所有错误的基类。错误通常是我们无法处理的,绝大多数情况下,我们不应该试图捕获错误。
- Throwable类有两个子类,Error与 Exception。
代码调试中的问题和解决过程
- 问题1:pp11.2里不知道在哪里使用try-catch语句
- 问题1解决方案:之后请教了同学,自己大概是知道了
- 问题2:在pp12.1改写里,不知道该把判断是否为回文的语句放在哪里
- 问题2解决方案:最后还是决定新声明一个方法来判断
代码托管
上周考试错题总结
- 错题1及原因,理解情况
Assume infile is a BufferedReader for a textfile and that the textfile is empty. What is returned from the message infile.readLine( ); ?
A . 0
B . null
C . a special character known as the End-of-file marker (EOF)
D . none of the above, the message causes a NullPointerException to be thrown
E . none of the above, the message causes a EndOfFileException to be thrown
正确答案: B 你的答案: E
我本来是依稀记得书上哪里好像看到一眼null,但是之后找不到了最后选了E,还是看书不仔细。readLine()方法返回与文件中下一个文本项相等的字符串。如果文件为空,则返回为null。 - 错题2及原因,理解情况
PrintWriter is a better output stream class that PrintStream because PrintWriter
A . has both print and println methods and PrintStream only has print
B . can output both byte and character streams and PrintStream can only output byte streams
C . has error checking mechanisms as part of the class and PrintStream does not
D . will not throw checked exceptions and PrintStream will
E . all of the above
正确答案: C 你的答案: B
这个我确实当时不知道,稍微想了一下,所以错了。打印器类是一个编写器类,而打印流类是一个流类。主要的区别是打印器是专为文件设计的,因此错误检查机制不是打印流的一部分。 - 错题3及原因,理解情况
The following defines a new Exception called AnewException.
public Exception ANewException
{
public ANewException(String message)
{
super(message);
}
}
A . true
B . false
正确答案: B 你的答案: A
感觉是没毛病的,应该是对的呀,自己想不出原因,看解析:定义几乎是正确的,但它必须定义一个类,而不是一个例外。异常是一个类,异常应该扩展异常。类定义的标头应该是公共类的辅助扩展异常。
结对及互评
点评模板:
- 博客中值得学习的或问题:
- 对教材的学习很认真,在网上也查找了很多资料和图片,很有助于学习理解。
- 学习态度认真,博客美观,可以看出是一个优秀的同学。
- ...
- 代码中值得学习的或问题:
- 写得好啊,对项目的解决很到位,很注意细节,是用了很大心思写出来的优秀的代码。
- 代码数量很多,比我多的多,可以看出很喜欢学习java,经常在敲代码。
点评过的同学博客和代码
- 本周结对学习情况
- 20172324
- 结对学习内容
- 四则运算的解决方案。。。。好像就这个了唉,其他的都是无关紧要的小问题,就解决难度而言根本不配和四则运算放在一起,所以就这一个了。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 189/189 | 1/1 | 18/18 | |
第二周 | 250/439 | 1/2 | 21/39 | |
第三周 | 437/876 | 2/4 | 25/64 | |
第四周 | 459/1335 | 2/6 | 21/85 | |
第五周 | 547/1882 | 1/7 | 20/115 | |
第六周 | 592/2474 | 2/9 | 25/150 | |
第七周 | 782/3256 | 1/10 | 29/179 | |
第八周 | 830/4086 | 3/13 | 40/219 | |
第九周 | 1300/5386 | 2/15 | 40/259 |