20162320刘先润第8周学习总结

学号20162320 《程序设计与数据结构》第8周学习总结

教材学习内容总结

  • 异常,指中断了正常指令流的事件,异常是程序运行时产生的,跟编译没关系。异常分为ExceptionError两类,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类包含三个对象引用变量(in\out和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 小时

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

参考资料

posted @ 2017-04-23 19:09  润润大魔王  阅读(244)  评论(6编辑  收藏  举报