Java 常见异常及层次结构

1.ConcurrentModificationException

出现场景:同时对容器进行遍历和修改时会抛出该异常

Fixed方法:使用CopyOnWriteArrayList等免锁容器或避免同时读写容器

2.InterruptException

出现场景:在调用了Thread.interrupt()或ExecutorService.shutdownNow()后线程正在sleep0者执行其他阻塞操作的时候,I/O操作除外。(ExecutorService.shutdown()不是打断sleep)

Fixed方法:不需要fixed,被打断是正常行为。

3.OutOfMemeoryError

出现场景:内存不足错误。当可用内存不足以让Java虚拟机分配给一个对象时抛出该错误。

Fixed方法:首先确定是哪个部分溢出:分为Java heap space(堆溢出)  和  PermGen space(永久保存区,这部分区域不会被GC回收)。

永久区溢出可以通过调整JVM的 -XX:MaxPermSize 来调整。

堆溢出可以通过调整JVM的启动参数 -Xmn、-Xms、-Xmx,一般-Xms和-Xmx不超过80%,-Xmn为-Xmx的1/4。

可以通过在JVM启动参数中添加-XX:+HeapDumpOnOutOfMemoryError来确保发生内存溢出时生成dump文件,然后使用Memory Analyze工具来分析dump文件。还可以使用实时分析工具Jprofile。

4.StackOverflowError

出现场景:栈满了的时候就会抛出该异常。栈帧太多,也就是函数调用层级过多时就会出现此异常,检查是否有死递归的情况。比如定义了无限多个int变量,就会出此异常。

Fixed方法:调整JVM启动参数 -Xss 来进行栈大小的调整。

5.Classnotfoundexception

没有找到加载的类时报错的。查看那个类在不在就知道了。

6.IOException

EOFException    当输入过程中意外到达文件或流的末尾时,抛出此异常

FileNotFoundException   文件不存在的时候抛出此异常

7.异常的层次结构

Thorwable类所有异常和错误的超类,有两个子类Error和Exception,分别表示错误和异常。

其中异常类Exception又分为运行时异常(RuntimeException)和非运行时异常,又叫非检查异常和检查异常。

运行时异常包含:ClassCaseException,NullPointException,IndexOutOfBoundsException等。

非运行时异常包含:IOException,ClassNotFounException,InterruptException等。

Error包含:OutOfMemoryError、StackOverFlowError、ThreadDeath等比较严重的系统级别错误,Error一般会导致系统挂掉。

你可能感兴趣的:(Java 常见异常及层次结构)