1.什么是异常:非正常状况或错误的对象,由程序或运行时环境抛出,可根据须要进行捕获处理
2.错误:相似异常,但不可恢复且必须捕获处理
3.try-catch:用于捕获可能出现的异常语句块;try可关联多个catch,catch为异常处理器,用于匹配可能的异常
4.finally子句:保证必定执行某段代码(能够不写)
5.为何要捕获异常:没有捕获的异常会使程序非正常停止,捕获异常但是程序跳过可能异常语句,继续运行程序
6.异常传递:此级没有捕获异常,会返回向上一级的调用方法,直到被捕获。
7.自定义异常:从Exception类或其后代类中派生的,选择一个做为父类,新异常由所表明的问题和条件决定
8.I/O异常:html
1.自我理解:一种不是循环的循环
2.应用:迷宫,汉诺塔问题java
问题1:书上的重点概念“异常抛出时所输出的信息,提供了方法调用堆栈踪影”,然而我并不知道什么是堆栈踪影。。。git
问题1解决过程:居然百度不到概念。。。综合理解一下,大概是异常抛出时,IDEA提示错误的那几行红字:指明异常发生在何处算法
【参考资料】:
辛勤的代码工
既然选择了远方 便只顾风雨兼程编程
问题2:无心中看到一个问题:“是否能够在一个catch代码块里捕获多个异常”,答案是能够的,那若是是这样,还写那么多句catch干吗,都写一个里面不就行了?数组
问题2解决过程:嗯,这是Java自己的升级,在Java7里,catch代码块获得了升级,用以在单个catch块中处理多个异常。若是你要捕获多个异常而且它们包含类似的代码,使用这一特性将会减小代码重复度函数
【参考资料】:
JAVA 7新特性-在单个catch代码块中捕获多个异常
风同样的码农学习
问题3:由于在写习题PP12.1的时候,用递归出了一点问题(已经记录在博客里面),结合书上的自测题,了解一下“何时应避免使用递归”以及“递归与循环的比较”.net
问题3解决过程:
1.递归与循环是两种不一样的解决问题的典型思路。
2.递归算法:
优势:代码简洁、清晰,而且容易验证正确性。
缺点:它的运行须要较屡次数的函数调用,若是调用层数比较深,须要增长额外的堆栈处理,好比参数传递须要压栈等操做,会对执行效率有必定影响。
3.循环算法:
优势:速度快,结构简单。
缺点:并不能解决全部的问题。
4.当使用迭代法更简单时,避免使用递归,以免屡次调用方法的开销设计
【参考资料】:
ggxxkkll的专栏
递归这东西是否是尽可能避免使用?
百度知道
什么时候使用递归
问题1:PP11.1。我老是以为书上的问题表述不是很清楚:好比,“在程序的main方法中读取输入的字符串,直到输入“DONE”为止。若是输入的字符串多于20个字符,则抛出异常”。总以为不是很理解意思:是要输入一长串的字符串,读到DONE就中止读入,而后计算字符串是否超过20个吗?仍是要屡次输入字符串,直到输入DONE为止,而后累计输入的字符个数是否多余20个;
问题1解决过程:
综合以上想法,大概是要屡次输入,判断每一次输入的字符串是否超过20个。
1.代码调试过程当中发现的第一个问题:在用到字符串判断是否相等的时候,只能用方法. equals
才能判断,用“ == 或者 != ”则不行。
2.题目只要求判断每次输入的字符串是否超过20个,并未要求存储字符串,而我多此一举地加了上去,反而致使不能输入任意次了(由于数组须要提早申请内存),现已改正。
3.结合PP11.2,要求的是捕获异常,并输出一条适当信息并继续处理后面的字符串,代码如图:
我输出的结果是:当输入的字符串字符数超过20个时,会输出一条信息,包含异常的字符串,并继续输入直到DONE。
这里遇到的问题是写好了上图中的try-catch语句以后,老是会标红说try语句里的异常不存在,一头雾水,反复对照书上的代码,并未发现错误。后来操做了几个地方,可是无关痛痒,又尝试运行了一次,居然成功了。最后得出的结论是IDEA没有及时去掉标红吧。
问题2:PP12.1。按道理来讲,这道题应该很简单,我写的代码应该是对的,代码如图:
如图,我输入了“wew”,这是一个回文,但运行出现了问题,提示是递归的方法有问题
问题2解决方案:首先要解释一下代码。个人递归方法,用了两个参数n,m。n为0,表明字符串的索引值为0处的字符;m为最后一位的字符索引值。这样在递归方法里只要比较一下n和m处的字符是否相等就OK了,而后将n+1,m-1,继续比较,层层递归,直到不同的地方输出不是回文,不然的话到n>m的时候直接输出是回文即达到判断要求。
而后这里有一个问题是:递归的方法里须要提早定义字符串,才能继续比较。可是这个字符串是要用户输入的,而若是在递归方法里写用户交互的方法的话,会致使每一次调用递归方法的时候都要再输一次字符串。如图:
可是递归方法与main方法里的字符串仍是不能互通,虽然把递归方法写成一个类,而后再继承它应该能够解决,可是我不大想这样作,总以为很麻烦。
后来,在main方法外面声明了一个str变量,在main和递归方法里都能调用,如图:
这样算是解决了问题。
还有就是那个getstr的方法,并无用到,我一开始觉得还要在递归方法里get一下才能获得那个输入的字符串,现已删掉。
错题1:
错题1解析:没有关联捕获语句的try语句中没有代码,即引用某个未知的类,使用一个参数,或者处理新内存的生成,将抛出NullPointerException
错题2:
错题2解析:这两个异常都是RuntimeException的子元素,它自己就是异常的子元素,书上有写到,是我看的不够仔细
错题3:
错题3解析:书上原话:“Java中惟一的不可检测异常是RuntimeException类的对象或该类的后代类对象。”运行时异常不被检查异常。
错题4:
错题4解析:若是一个异常的发生处没有捕获和处理该异常,控制将当即返回到产生该异常的方法的上一级调用方法,若是仍未捕获将继续向上一级传递,直到异常被捕获。
错题5:
错题5解析:这题是蒙的,真的不会。照着机翻的理解一下:扫描器类经过拥有本身的catch (IOException…)catch语句,致使一个IOException的扫描器类中的任何代码都被扫描器类捕获,这样可能使用扫描器类的类就没必要处理这个被检查的异常。
错题6:
错题6解析:这个书上真没有,百度到的东西一大堆,并无过多的涉及到本题选项所说的东西:PrintWriter类是一个Writer类,而PrintStream类是一个流类。主要的区别是PrintWriter是专门为文件而设计的,所以有错误检查机制,而不是PrintStream的一部分。
错题7:
错题7解析:我明明记得曾经在哪里看到过try语句能够不用catch的,可是如今找不到了。。。当时我还觉得这题绝对会对的
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 309/309 | 1/1 | 20/20 | |
第二周 | 269/578 | 1/2 | 18/38 | |
第三周 | 236/776 | 1/3 | 22/60 | |
第四周 | 507/1283 | 2/5 | 30/90 | |
第五周 | 631/1914 | 1/6 | 30/120 | |
第六周 | 529/2443 | 1/7 | 25/145 | |
第七周 | 515/2958 | 1/8 | 25/170 | |
第八周 | 1128/4086 | 2/10 | 50/220 | |
第八周 | 1241/5327 | 1/11 | 15/235 |