Java总结--常用类库
-
String
、StringBuffer
、StringBuilder
-
String
:是一个final类,任何赋值对String的改变,都会产生新的String对象的生成 -
StringBuffer
:可变类,任何对它所指代的字符串的改变都不会产生新的对象,线程安全的。 -
StringBuilder
:可变类,线性不安全的,不支持并发操作,不适合多线程中使用,但其在单线程中的性能比StringBuffer高。
-
- Java异常
- 异常体系
-
Error
:程序无法处理的系统错误,编译器不做检查(与JVM相关的错误,系统崩溃、虚拟机错误、内存空间不足、方法调用栈溢出等)-
NOClassDefFoundError
:找不到class定义异常 -
StackOverflowError
:栈溢出异常 -
OutOfMemoryError
:内存溢出异常
-
-
EXception
:程序可以处理的异常,捕获后可能恢复-
RuntimeException
:运行时异常,不可预知的错误,程序应当自行避免(数组下标越界,空指针访问等)-
NullPointerException
:空指针异常 -
ClassCastException
:类型强制转换异常 -
IllegalArgumentException
:传递非法参数异常 -
IndexOutofBoundsException
:下标越界异常 -
NumberFormatException
:数字格式异常
-
-
非RuntimeException
:非运行时异常,可预知,编译器可以检查(IOException、SqlException等)-
ClassNotFoundException
:找不带指定类异常 -
IOException
:IO操作异常
-
-
-
- 异常处理机制
- 抛出异常:创建异常对象(包含异常类型,异常出现时的程序状态等信息),交由运行时系统处理
- 捕获异常:寻找合适的处理器处理异常(ExceptionHandler能处理的异常类型和抛出的异常类型相符是为合适的异常处理器),否则终止程序
- 注:
finally
要先于return
执行
- 注:
- 异常处理原则
- 注:
try-catch
性能比if
差,且开销比if
大
- 注:
- 异常体系
-
Java集合框架
- 总览
- 注:
-
HashSet
底层实现是HashMap
-
TreeSet
底层实现是TreeMap
- 动态扩容就是创建一个新的数组,然后将原数组元素拷贝进去
-
- 注:
- Map
-
HashMap
、HashTable
、ConccurentHashMap
区别 -
HashMap
- 线程不安全
- 8以前:数组+链表
- 8以后:数组+链表+红黑树
- 源码:
- 注:当链表节点大于8转换成红黑树,红黑树节点小于6转换成链表
- HashMap是lazyload的(用的时候在初始化)
- key为null,hash值为0,即**HashMap可以存null
- 注:当链表节点大于8转换成红黑树,红黑树节点小于6转换成链表
- HashMap put方法的逻辑
- 源码:
-
-
ConccurentHashMap
- 早期
- 当前:CAS+synchronized
- 源码
- put
注:ConccurentHashMap不允许插入null-
put方法逻辑总结
-
并发工具类
-
- 早期
- 总览
- IO机制
-
BIO
- InputStream、OutputStream,Reader、Writer
- InputStream、OutputStream,Reader、Writer
-
NIO
- 多路复用同步非阻塞IO(减少线程开销和线程切换带来的压力)
- channel
- Buffers
- select (调用底层操作系统的多路复用)
- channel
- 多路复用同步非阻塞IO(减少线程开销和线程切换带来的压力)
-
AIO
- 基于事件和回调机制
- 基于事件和回调机制
-
对比
-