Java异常体系
异常处理机制主要回答了三个问题
- What:异常类型回答了什么被抛出
- Where:异常堆栈跟踪回答了在哪抛出
- Why:异常信息回答了为什么被抛出
Error和Exception的区别
- Error:程序无法处理的系统错误,编译器不做检查
- Exception:程序可以处理的异常,捕获后可能恢复
- 总结:前者是程序无法处理的错误,后者是可以处理的异常
Exception下的两种异常
- RuntimeException:不可预知的,程序应当自行避免
- 非RuntimeException:可预知的,从编译器校验的异常,不处理无法通过编译
从责任角度看:
- Error属于JVM需要负担的责任
- RuntimeException是程序应该负担的责任
- Checked Exception可检查异常是Java编译器应该负担的责任
常见Error以及Exception
- RuntimeException
- NullPointerException:空指针引用异常
- ClassCastException:类型强制转换异常
- IllegalArgumentException:传递非法参数异常
- IndexOutOfBoundsException:下标越界异常
- NumberFormatException:数字格式异常
- 非RuntimeException
- ClassNotFoundException:找不到指定class的异常
- IOException:IO操作异常
- Error
- NoClassDefFoundError:找不到class定义的异常
- *Error:深递归导致栈被耗尽而抛出的异常
- OutOfMemoryError:内存溢出异常
Collection体系
集合之List和Set
集合之Map
说明:(n-1)&hash相当于hash%n
HashMap、HashTable、ConccurentHashMap三者的区别
- HashMap线程不安全,数组+链表+红黑树
- HashTable线程安全,锁住整个对象(HashTable,效率低),数组+链表
- ConccurentHashMap线程安全,CAS(没有哈希碰撞时)+同步锁(发生哈希碰撞时,同步锁锁住数组的头节点),数组+链表+红黑树
- HashMap的key、value均可为null,而其他的两个类key,value均不可为null
J.U.C包的分类
- 线程执行器executor
- 锁locks
- 原子变量类atomic
- 并发工具类tools
- 并发集合collections