1.异常(try-catch语句、异常类的层次和异常的处理)php
异常是一个定义非正常状况下或错误的对象,错误是表明不可恢复的问题而且必须捕获处理。html
错误与异常都是在程序编译和运行时出现的错误。不一样的是,异常能够被开发人员捕捉和处理;而错误通常是系统错误,通常不须要开发人员处理(也没法处理),好比内存溢出。
Exception是java中全部异常的基类。在java中异常被分为两大类,编译时异常和运行时异常。
Error是java中全部错误的基类。错误一般是咱们没法处理的,绝大多数状况下,咱们不该该试图捕获错误。java
异常体系具备可抛性,这个特性是Throwable体系中独有的特色。git
throws | throw | |
---|---|---|
区别1 | 使用在函数上 | 使用在函数内 |
区别2 | 后面跟异常对象类(能够多个,逗号隔开) | 后面跟异常对象 |
若是程序不处理异常,则将非正常地终止执行,并产生关于描述在何处发生什么异常的信息。web
try-catch语句能够捕获并处理异常,程序将继续正常执行。算法
每个try-catch语句均可以有一个可选的finally子句,用于定义一段不管是否有异常发生都将执行的代码。try语句块能够没有catch子句,没有catch子句时,若是须要仍然可使用finally子句。编程
try-catch语句的finally子句的执行与如何退出try语句无关。若是没有异常产生,try语句块能够执行完后将执行finally子句,当抛出异常时,将执行相应的catch子句,而后执行finally子句。数组
经过继承Exception类创建新的异常类,新的异常类最终是Throwable类的后代类,可使用throw语句。网络
2.I/O数据结构
流是一个有序的字节数列
标准的I/O流有三种,System类中有三种对象引用变量(in,out和err),分别表明了三种标准的I/O流。System.in为标准的输入流--键盘,System.out为标准输出流和System.err为标准错误流--显示器屏幕上的一个具体窗口。
1.递归思想
递归是一种编程技术,容许一个方法调用本身以达到最终目的。递归是以一种事物自身定义自身的过程。
任何递归的定义都必须有结束递归选择的基本状况。 递归方法一定有一条if-else语句,其中的一支做为检测基本状况的值。
2.迷宫旅行和汉诺塔问题
问题1解决方案:在Throwable类中方法里面找到了每次出现异常的时候抛出的错误提醒和异常何处的问题。getMessage()[返回此 throwable 的详细消息字符串。]和getStackTrace()[提供编程访问由 printStackTrace() 输出的堆栈跟踪信息。]两个方法产生的。其中的Exception算是全部异常的父类,其下的全部子类都是每个相对具体的异常。异常的规定也是按照一种编写类的方式,编写类中方法的方式进行构造的。
- Throwable类是Error和Exception类的父类。
- Throwable 类是 Java 语言中全部错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,才能经过 Java 虚拟机或者 Java throw 语句抛出。相似地,只有此类或其子类之一才能够是 catch 子句中的参数类型。
- 异常类的体系结构:
问题2的解决方案:Java中惟一的不可检测异常是RuntimeException类的对象或该类的后代对象。全部其余异常都是可检测的异常。对于可检测的异常是,发生异常的方法不捕获和处理该异常,则必须在该方法定义的声明头中包含throws子句。
- 可检测异常在方法定义的声明头中追加一条throw子句,就明确承诺了该方法在异常发生时将抛出或传递异常。
- 不可检测异常则不须要只用throws子句。
问题3的解决方案:递归和循环的差异,我以为最明显的就是递归的不断的调用本身的方法,而循环则是否则,经过for、while、do循环进行一次一次的往复运算。递归和循环二者彻底能够互换。若是用到递归的地方能够很方便使用循环替换,而不影响程序的阅读,那么替换成递归每每是好的。像斐波那契数列、汉诺塔、阶乘等问题均可以用递归解决。
递归算法:循环算法:
- 优势:代码简洁、清晰,而且容易验证正确性。(若是你真的理解了算法的话,不然你更晕)
- 缺点:它的运行须要较屡次数的函数调用,若是调用层数比较深,须要增长额外的堆栈处理(还有可能出现堆栈溢出的状况),好比参数传递须要压栈等操做,会对执行效率有必定影响。可是,对于某些问题,若是不使用递归,那将是极端难看的代码。
- 优势:速度快,结构简单。
- 缺点:并不能解决全部的问题。有的问题适合使用递归而不是循环。若是使用循环并不困难的话,最好使用循环。
问题4的解决方案:在java.io包中操做文件内容的主要有两大类:字节流、字符流,两类都分为输入和输出操做。在字节流中输出数据主要是使用OutputStream完成,输入使的是InputStream,在字符流中输出主要是使用Writer类完成,输入流主要使用Reader类完成。(这四个都是抽象类)在全部的硬盘上保存文件或进行传输的时候都是以字节的方法进行的,包括图片也是按字节完成,而字符是只有在内存中才会造成的,因此使用字节的操做是最多的。两种写入文件的方式,但字节流的使用更重要。
while (another.equalsIgnoreCase("Y"))
就开始写仍是就单纯的判断回文处进行编写,不管是前者仍是后者都不知道代码如何去写。顿觉脑洞的重要性,有一个会编程的脑壳该多好啊!我尝试了写前者的代码,可是每写一步都举步维艰,因此放弃着手写后者,可是后者在哪发生递归还是个问题,还有非递归的位置,又该如何编写。在看过同窗编写的代码,恍然大悟,对于一个和两个的字符做为非递归的位置,而较多的字符能够进行一个递归处理,这样完成了,在用递归的main函数里面进行一个是否继续继续下去的递归不就行了。public static boolean Palindrome(String str) { if(str.length()==1) return true ; else if(str.length()==2) { if(str.charAt(0)==str.charAt(str.length()-1)) return true ; else return false ; } else if(str.charAt(0)==str.charAt(str.length()-1)) return Palindrome(str.substring(1,str.length()-1)) ; else return false; }
DONE
的时候,终止输入而后在判断整个字符串的一个处理。多是个人理解力有问题致使,因此,我觉的前者能够先尝试尝试,因此个人PP11.1就是按照前者进行编写的,可是在编写PP11.2的时候本身不会编写了,有辄回来写第二种的代码,很简单就搞定了。多是我以前的理解有误吧。
PP11.1
PP11.2
问题3解决方案:刚听完IO的问题就要去编写IO的代码,感受好恐怖。听的云里雾里的,尤为还有一堆的类去理解,用哪一个不用哪一个的问题,对应的writer和reader什么的,一堆一堆的,好在有老师给的代码能够参考。在老师的代码中有BufferedOutputStream和BufferedInputStream两种可供理解,两种字节流可使用,进行往文件里面写入读出。(在文件里面写出这两串数字真不容易......)
- Buffered缓冲流::BufferedInputStream,BufferedOutputStream,BufferedReader,BufferedWriter,是带缓冲区的处理流,缓冲区的做用的主要目的是:避免每次和硬盘打交道,提升数据访问的效率。

本周结对学习状况
20172304方艺雯
20172323王禹涵
1.异常
2.I/O流
3.递归
4.递归应用--迷宫问题和汉诺塔问题
十一章和第十二章的内容讲的是异常和递归,并且第十一章中I/O流部份内容在蓝墨云上的视频一堆,感受本身有点忙不过来。并且立刻快要检查四则运算的编程实验了,咱们仨的代码,分开使用就能够,合在一块儿使用就一堆问题,好烦!看完第十二章的内容,感受本书已经学完了一大半,可是感受本身仍是以有不少问题,还有不少不足须要解决。惆怅......本身还有不少不少的关于I/O流的内容没有看,因此有关I/O流的问题尚未遇到不少,写的也就少了。
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 136/136 | 1/1 | 15/15 | |
第二周 | 570/706 | 1/2 | 20/35 | |
第三周 | 613/1319 | 1/3 | 23/58 | |
第四周 | 1249/2568 | 1/5 | 30/88 | |
第五周 | 904/3472 | 1/6 | 30/118 | |
第六周 | 540/4012 | 1/7 | 30/118 | |
第七周 | 826/4838 | 1/7 | 30/178 | |
第八周 | 925/5763 | 2/9 | 45/223 | |
第九周 | 253/6016 | 2/10 | 55/278 |