第十一章 持有对象
第十二章 通过异常处理错误
第十三章 字符串
容器 持有对象的引用(容器不能持有基本类型,自动包装机制会执行基本类型到容器中所持有的包装类型之间的双向转换)
Collection 一个独立元素的序列,这些元素都服从一条或多条规则。
Map 一组成对的“键值对”对象,允许你用键来查找值。
1、Collection是List、Set等集合高度抽象出来的接口,它包含了这些集合的基本操作,它主要又分为两大部分:List和Set。
List接口通常表示一个列表(数组、队列、链表、栈等),其中的元素可以重复,常用实现类为ArrayList和LinkedList,另外还有不常用的Vector。另外,LinkedList还是实现了Queue接口,因此也可以作为队列使用。
Set接口通常表示一个集合,其中的元素不允许重复(通过hashcode和equals函数保证),常用实现类有HashSet和TreeSet,HashSet是通过Map中的HashMap实现的,而TreeSet是通过Map中的TreeMap实现的。另外,TreeSet还实现了SortedSet接口,因此是有序的集合(集合中的元素要实现Comparable接口,并覆写Compartor函数才行)。
抽象类AbstractCollection、AbstractList和AbstractSet分别实现了Collection、List和Set接口,用这些抽象类去实现接口,在抽象类中实现接口中的若干或全部方法,这样下面的一些类只需直接继承该抽象类,并实现自己需要的方法即可,而不用实现接口中的全部抽象方法。
2、Map是一个映射接口,其中的每个元素都是一个key-value键值对,同样抽象类AbstractMap实现了Map接口中的大部分函数,TreeMap、HashMap、WeakHashMap等实现类都通过继承AbstractMap来实现,另外,不常用的Hashtable直接实现了Map接口,它和Vector都是JDK1.0就引入的集合类。
3、Iterator是遍历集合的迭代器(不能遍历Map,只用来遍历Collection),Collection的实现类都实现了iterator()函数,它返回一个Iterator对象,用来遍历集合,ListIterator则专门用来遍历List。而Enumeration则是JDK1.0时引入的,作用与Iterator相同,但它的功能比Iterator要少,它只能在Hashtable、Vector和Stack中使用。
4、Arrays和Collections是用来操作数组、集合的两个工具类,例如在ArrayList和Vector中大量调用了Arrays.Copyof()方法,而Collections中有很多静态方法可以返回各集合类的synchronized版本,即线程安全的版本,如果要用线程安全的结合类,首选Concurrent并发包下的对应的集合类。
![](https://i-blog.csdnimg.cn/blog_migrate/8095f7284e70e7f9732a032ea8575c7b.png)
1. Throwable
Throwable是 Java 中所有错误或异常的基类
2. Error
表示编译时和系统错误
3. Exception
The class Exception
and its subclasses are a form of Throwable
that indicates conditions that a reasonable application might want to catch.
4. RuntimeException
RuntimeException类及其子类表示JVM在运行期间可能出现的错误。编译器不会检查此类异常,并且不要求处理异常
checked exception:必须显式地捕获或者传递,不处理编译不能通过
unchecked exception:不必捕获或抛出,编译可以通过 (Error 和 RuntimeException)
异常处理=====>
- try -- 将要被监听的代码放在try语句块之内,当try语句块内发生异常时,异常就被抛出
- catch -- catch用来捕获try语句块中发生的异常
- finally -- finally语句块总是会被执行。只有执行完finally块,才会继续执行try或者catch块中的return或者throw语句,如果finally中使用了return或者throw等终止方法的语句,则不会跳回执行
- throw -- 抛出异常
- throws -- 用于声明方法可能抛出的异常
public void test()throws Exception{
try{
//TODO
}catch(Exception e){
throw new RuntimeException();
}finally{
//资源回收
}
}
字符串
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
/** The value is used for character storage. */
private final char value[];
......
}
String 对象是不可变的,不能被继承!实际是用不变的字符数组存储字符序列!
“对String对象的任何改变都不影响到原对象,相关的任何change操作都会生成新的对象”。
String、StringBuilder、StringBuffer
一般执行效率:StringBuilder > StringBuffer > String
StringBuffer 线程安全