第八周作业

20162313 2016-2017-2 《程序设计与数据结构》第8周学习总结

教材学习内容总结

异常处理
不捕获异常
try-catch语句
异常传播
异常类的层次
I/O异常

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

  • 问题1:java的异常体系是什么以及各个类的具体描述?
  • 问题1解决方案:
    Throwable 类是 Java 语言中所有错误或异常的超类(这就是一切皆可抛的东西)。它有两个子类:Error和Exception。

Error:用于指示合理的应用程序不应该试图捕获的严重问题。这种情况是很大的问题,大到你不能处理了,所以听之任之就行了,你不用管它。比如说VirtualMachineError:当 Java 虚拟机崩溃或用尽了它继续操作所需的资源时,抛出该错误。好吧,就算这个异常的存在了,那么应该何时,如何处理它呢??交给JVM吧,没有比它更专业的了。

Exception:它指出了合理的应用程序想要捕获的条件。Exception又分为两类:一种是CheckedException,一种是UncheckedException。这两种Exception的区别主要是CheckedException需要用try...catch...显示的捕获,而UncheckedException不需要捕获。通常UncheckedException又叫做RuntimeException。《effective java》指出:对于可恢复的条件使用被检查的异常(CheckedException),对于程序错误(言外之意不可恢复,大错已经酿成)使用运行时异常(RuntimeException)。

  • 问题2:异常真正出现时能够被修复的概率既然极小,这个处理机制被开发出来究竟为了什么?
  • 问题2解决方案:异常的本意是好的,让我们试图修复程序,但是现实中我们修复的几率很小,我们很多时候就是用它来记录出错的信息。如果你厌倦了不停的处理异常,重新抛出异常对你来说可能是一个很好的解脱。原封不动的把这个异常抛给上一级,抛给调用这个方法的人,让他来费脑筋吧。这样看来,java异常(当然指的是受检异常)又给我们平添很多麻烦,尽管它的出发点是好的。
  • 问题3:I/O流的类
  • 问题3解决方案:java的常用输入、输出流其实都是继承自4个抽象类,分别是
    基于单字节的InputStream,OutputStream类(面向字节形式的I/O)
    基于双字节的Unicode代码单元的 Reader, Writer类(面向字符形式的I/O)

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

  • 问题1:10.2程序的后面提到过integer.parseint的用法?
  • 问题1解决方案:Integer.parseInt(String)就是将String字符类型数据转换为Integer整型数据,Integer.parseInt(String)遇到一些不能被转换为整型的字符时,会抛出异常
    在360问答中找到这样的回答
    返回:
    使用指定基数的字符串参数表示的整数。
    抛出:
    NumberFormatException - 如果 String 不包含可分析的 int。
    示例:
    parseInt("0", 10) 返回 0
    parseInt("473", 10) 返回 473
    parseInt("-0", 10) 返回 0
    parseInt("-FF", 16) 返回 -255
    parseInt("1100110", 2) 返回 102
    parseInt("2147483647", 10) 返回 2147483647
    parseInt("-2147483648", 10) 返回 -2147483648
    parseInt("2147483648", 10) 抛出 NumberFormatException
    parseInt("99", 8) 抛出 NumberFormatException
    parseInt("Kona", 10) 抛出 NumberFormatException
    parseInt("Kona", 27) 返回 411787

代码托管

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

上周考试错题总结

Let Dog be a subclass of Animal, and suppose Animal has a method called speak() that is overridden in the Dog class. Consider the following code(假设Dog是Animal的子类,且Animal有一个方法speak(),该方法在Dog类中被重载).

Animal spot = new Dog();
spot.speak();

Which of the following is true? (下面哪项是正确的)D

A .

This code will result in a compile-time error. (这段代码会引起编译时错误)

B .

This code will result in a run-time error. (这段代码会引起运行时错误)

C .

The speak method defined in the Animal class will be called. (将会调用Animal类中的speak方法)

D .

The speak method defined in the Dog class will be called. (将会调用Dog类中的speak方法)

E .

The speak method will not be called at all. (不会调用任何speak方法)

Which of the following methods are included with any object that implements the Iterator interface? (下面哪个方法包含了实现Iterator接口的对象?)D

A .

next

B .

hasNext

C .

toString

D .

all of the above(以上都正确)

E .

a and b(a和b)

In order to create a class that implements an interface, the __________________ keyword is used(为了创建一个实现接口的类,需要使用关键字____)C

A .

extends

B .

interfaces

C .

implements

D .

finalizes

E .

abstracts

Consider the following line of code. (思考下行代码)

Comparable s = new String();

Which of the following statements is true about this line? (关于这行代码,下面哪句陈述是正确)C

A .

It will result in a compile-time error(这行代码会引起编译时错误).

B .

It will result in a run-time error(这行代码会引起运行时错误).

C .

It will create a String object pointed to by a Comparable reference. (这行代码会创建一个Comparable引用指向的String对象)

D .

Although it is perfectly valid Java, it should be avoided due to confusion(虽然这是有效的Java代码,但应该避免使用,以免引起混淆).

E .

none of the above are true(以上都正确)

结对及互评

20162309

点评过的同学博客和代码

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 90/90 1/1 20/20
第二周 377/467 1/2 14/34
第三周 344/811 1/3 17/51
第四周 846/1684 2/5 》30/81
第五周 777/2461 1/6 12/93
第六周 461/2922 1/7 10/103
第七周 761/3683 2/9 25/128
第八周 911/4594 1/10 10/138

尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。

参考:软件工程软件的估计为什么这么难软件工程 估计方法

  • 计划学习时间:18小时

  • 实际学习时间:10小时

  • 改进情况:

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料

posted @ 2017-04-23 21:14  DeforeSya  阅读(153)  评论(2编辑  收藏  举报