-
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
- 基于事件和回调机制
- 基于事件和回调机制
-
对比
-
相关文章: