学号20162320 《程序设计与数据结构》第8周学习总结
教材学习内容总结
- 异常,指中断了正常指令流的事件,异常是程序运行时产生的,跟编译没关系。异常分为
Exception
和Error
两类,Excaption
包含编译时异常和运行时异常。注:程序员对Error
无能为力,只能处理Exception
。 - 应对异常的三种方法,分别是不处理异常、在异常发生的地方处理和在程序的其他地方处理异常。注:异常输出的第一行表明异常的类型和原因,其余行称为调用栈追踪,表明异常发生的位置。
try···catch···finally
可以用来处理异常,把可能出现异常的代码放入try
内,把对异常处理的代码放入catch
内,把清理资源的代码放入finally
。注:一个try
块可以有几个catch
子句与之对应。无论是正常退出try块,还是因抛出一个异常退出,都要执行finally子句。- 异常传播,如果在发生异常的方法内没有捕获并处理它,控制立即转向产生异常的这个方法的调用方法,如果在那里也没捕获,那么控制就在转向它的调用方法。
- 异常类的层次,从
Exception
类或从它的一个后继类派生一个新类就可以定义新的异常。选择哪个类作为父类则根据条件而定。 - 必捡异常和免检异常,必检异常必须被一个方法捕获或者列在throws子句中,而免检异常不需要throws子句。注:方法头中的throws子句必须包含本方法中没有捕获及处理的必检异常。在Java中只有
RuntimeException
或其后代类的对象彩色免检异常。 throw
的作用是当异常对于虚拟机来说无法判断时生成一个异常对象,使其了解此处异常。throws
的作用是声明一个函数可能会产生异常,在调用函数的地方对函数进行处理。- IO系统,即input输入和output输出。System类包含三个对象引用变量(inout和err),代表三个标准的IO流,且三个引用声明都为public和static。
- 内部类,即在类中生成一个类。例如:
class A{
class B
}
编译后不仅会生成A.class,还会有A$B.class,代表的是A内部中的B类,而在主函数中生成内部类的对象则是如下A.B test = new A().new B();
教材学习中的问题和解决过程
- 问题1:程序10.7中提及到了显式的异常处理,这是什么意思呢。
解决方案:通过查阅第三眼的思绪的博客,了解到java异常处理的三种方式分别是隐式抛出、显示抛出、直接处理。而显式的异常处理就是说如果出错让其捕获并处理错误,应该就是将他抛出。而程序10.7中就只是让程序中断。因为所有的IOExceptions都是必检异常。 - 问题2:教材中关于IO流对文件的输入读取讲的并不详细,不知道如何读取一个带有文字的文件到另一个文件中。
解决方案:通过学习蓝墨上的视频,学会了将中文编成比特位的阿斯科代码。如图但仍未懂如何原文输入。
代码调试中的问题和解决过程
- 问题1:图中catch是如何捕捉到异常的呢,我们前面的代码并没有指出非整形数和长度不够会导致异常啊?
解决方法:通过观察代码发现问题可能出现在district = Integer.parseInt(code.substring(3,7));
中,通过查阅帮助文档发现Integer能在 int 类型和 String 类型之间互相转换,还提供了处理 int 类型时非常有用的其他一些常量和方法。关于phraseInt中重要的一点是,如果字符串的长度不为int整型的值就则抛出一个 NumberFormatException 类型的异常。对于不恰当的长度抛出StringIndexOutOfBoundsException
则是指示索引或者为负,或者超出字符串的大小会抛出该异常。
代码托管
(statistics.sh脚本的运行结果截图)
上周考试错题总结
- 错题1:假设Dog是Animal的子类,且Animal有一个方法speak(),该方法在Dog类中被重载。
Animal spot = new Dog();
spot.speak();
正确答案:将会调用Dog类中的speak方法
解决方案:speak方法被Dog重写,在Dog类中定义的speak方法将在这种情况下调用,在运行时,java虚拟机决定Dog对象绑定的方法在Dog类中定义的方法。
- 错题2:假设Animal是一个指定了单一方法的接口--speak。现在假设Dog类实现了Animal接口。除了speak方法外,Dog类还有一个方法wagTail。现在思考下面的代码:
Animal a = new Dog();
a.wagTail();
这段代码会引起编译出错
解决方案:此代码将导致编译时的错误由于动物接口没有指定一个wagTail的方法。这个编译时错误可以通过明确铸造一个像Dog一样叫wagTail的方法来避免。
- 错题3:假设Animal是一个接口。那么,通过初始化Animal接口创建一个对象是可能的。(false)
解决方案:教材上的原文P255页,接口是一组抽象方法,不能被实例化。
结对及互评
点评过的同学博客和代码
其他(感悟、思考等,可选)
希望老师能够找个时间订正一下PP系列的练习题,因为有很多题实在是不会做,急需答案。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 180/180 | 1/4 | 15/15 | |
第二周 | 465/645 | 1/5 | 18/33 | 学习了scanner |
第三周 | 456/1101 | 1/6 | 17/ 50 | 学会了如何编写数学公式等 |
第四周 | 620/1734 | 2/8 | 40/90 | 学了条件循环和数组 |
第五周 | 890/2604 | 1/9 | 25/115 | 接近学会了编写类 |
第六周 | 462/3068 | 1/10 | 30/145 | 了解了继承的概念 |
第七周 | 860/3928 | 2/12 | 41/186 | 巩固以往知识 |
第八周 | 241/4179 | 1/13 | 20/206 | 异常类的知识 |
第九周 | 1/14 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
- 计划学习时间:15 小时
- 实际学习时间:20 小时
(有空多看看现代软件工程 课件 软件工程师能力自我评价表)