java第5章学习总结
学号20145336 《Java程序设计》第5周学习总结
教材学习内容总结
try catch
- JVM会先尝试执行try区块中的内容,若发生错误且与catch后面的类型相符,则执行catch区块中的代码。
- 若想在捕捉(catch)错误之后恢复程序正常执行流程,可以将try、catch区块放入while循环中。
- 由于JVM是尝试执行try区块,所以一旦发生错误被捕捉,那么这一次的try区块就相当于没有执行.
finally区块
最后一定要执行关闭资源的动作,try、catch语法还可以搭配finally,无论try区块中有无发生异常,若撰写finally区块,则finally区块一定会被执行。举一个例子:
package ch08;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class FileUtil {
public static String readFile(String name) throws FileNotFoundException {
StringBuilder text = new StringBuilder();
try {
Scanner console = new Scanner(new FileInputStream(name));
while (console.hasNext()) {
text.append(console.nextLine()).append('\n');
}
} catch (FileNotFoundException ex) {
ex.printStackTrace();
throw ex;
}
return text.toString();
}
}
由于finally区块一定会被执行,在这个范例中scanner原先是null,若FileInputStream创建失败,则scanner就有可能还是null,因此在finally区块中必须先检查scanner是否有参考对象,有的话才进一步调用close()方法,否则scanner参考至null又打算调用close()方法,反而会抛出NullPointerException
。 想要尝试关闭资源(Try-With-Resources)的对象,是撰写在try之后的括号中,如果无须catch处理任何异常,可以不用撰写,也不要撰写finally。尝试关闭资源语法可套用的对象,必须操作java.lang.AutoCloseable
接口,该语法也可以同时关闭两个以上的对象资源,只要中间以分号隔开。在try的括号中,越后面撰写的对象资源会越早被关闭。
认识Collection架构
程序中常有收集对象的需求,就目前为止,你学过可以收集对象的方式就是使用object数组,在javaSE中其实就提供了数个收集对象的类。你可以直接取用这些类,而不用重新打造类似的API。收集对象的行为,像是新增对象的add()方法,移除对象的remove()方法等,都是定义在java.util.Collection中。既然能收集对象,也能逐一取得对象,这就是java.lang.Iterable定义的行为,它定义了iterator()方法返回java.util.Iterator操作对象,可以让你逐一取得对象。然而收集对象会有不同的需求,如果希望收集时记录每个对象的索引顺序,并可依索引取回对象,这样的行为定义在java.util.List接口中。如果希望收集的对象不重复,具有集合的行为,则由java.util.Set定义。如果希望收集对象时,以队列排列。收集的对象加入至尾端,取得对象时从前端,则可以使用java.util.Queue。如果希望对Queue的两端进行加入、移除等动作,则可以使用java.util.Deque。
常用的Map操作类为java.util.HashMap
与java.util.TreeMap
,其继承自抽象类java.util.AbstractMap。
- 使用HashMap:在HashMap中建立键值对应之后,键是无序的。
- 使用TreeMap:如果使用TreeMap建立键值对应,则键的部分将会排序,条件是作为键的对象必须操作Comparable接口,或者是创建TreeMap时指定操作Comparator接口的对象。
- 使用Properties:Properties类继承自HashTable,HashTable操作了Map接口,Properties自然也有Map行为。Properties的=左边设定属性名称,右边设定属性值。可以使用Properties的load()方法指定InputStream实例。load()方法结束后会自动关闭InputStream实例。
如果想取得Map中所有的键,可以调用Map的keySet()返回Set对象。 如果想同时取得Map的键与值,可以使用entrySet()
方法,这会返回一个Set对象,每个元素都是Map.Entry
实例,可以调用getKey()
取得键,调用getValue()
取得值。
具有索引的List
ArrayList
一般在线性结构时使用。LinkedList
一般在链接结构时使用。
- 内容不重复的set顾名思义,内容不重复,set是一个用来找不重复的接口。
教材学习中的问题和解决过程
本周的学习还是有许多不足的地方还有许多需要改进的地方,学习了代码异常的处理方法,以后遇见问题也可以更加方便的改进。
学习进度条
| | 代码行数(新增/累积)| 博客量(新增/累积)|学习时间(新增/累积)|重要成长|
| -------- | :----------------:|:----------------:|:---------------: |:-----:|
| 目标 | 5000行 | 30篇 | 400小时 | |
| 第一周 | 30/30 | 2/2 | 20/20 | |
| 第二周 | 100/130 | 2/4 | 18/38 | |
| 第三周 | 100/230 | 3/7 | 22/60 | |
| 第四周 | 300/530 | 2/9 | 30/90 | |