Java基础-异常-常见异常与错误
2021-01-16 本文已影响0人
HughJin
开发常见异常
常见异常 | 类型 | 说明 | 异常备注 | JDK的类API |
---|---|---|---|---|
java.lang.NullPointerException | 运行时异常 | 空指针异常 | 解决方法是在调用某个对象的方法时候判断这个对 象是否可能为空,如果可能,则增加判断的语句 | |
java.lang.ArithmeticException | 运行时异常 | 算术错误,如除以 0 | 比如程序中出现了除以零这样的运算就会出这样的异常 | |
java.lang.NumberFormatException | 运行时异常 | 数字转换异常 | 字符串转换为数字类型时抛出的异常,在把一个表示数字的字符串转换成数字类型的时候可能会报这个异常,原因是作为参数的字符串不是由数字组成的。 | |
java.lang.ClassCastException | 运行时异常 | 类型转换异常 | 通常是进行强制类型转换时候出的错误。<br />强制类型转换的前提是父类引用指向的对象的类型是子类的时候才可以进行强制类型转换,如果父类引用指向的对象的类型不是子类的时候将产生 java.lang.ClassCastException异常。 | |
java.lang.ArrayIndexOutOfBoundsException | 运行时异常 | 数组下标越界异常 | 数组下标越界错误,解决方法就是查看为什么数组下标越界。 | |
java.lang.IndexOutOfBoundsException | 运行时异常 | 索引越界异常 | 常针对集合类,通过索引获取数据时发生,解决方法,不指定大于集合类长度的索引。 | |
java.lang.IllegalArgumentException | 运行时异常 | 方法收到非法参数 | 方法的参数错误。一旦发现这个异常,要做的就是赶紧去检查一下方法调用中的参数传递是不是出现了错误。 | |
extends Exception表示检查异常;extends RuntimeException表示运行时异常 | ||||
java.lang.IllegalAccessException | 检查异常 | 没有访问权限异常 | 当应用程序要调用一个类,但当前的方法即没有对该类的访问权限便会出现这个异常。对程序中用了Package的情况下要注意这个异常 | |
java.lang.ClassNotFoundException | 检查异常 | 不能加载请求的类 | 项目中查找下类,是否存在 | |
java.lang.NoSuchFieldException | 检查异常 | 请求的域不存在 | 检查调用类属性是否存在 | |
java.lang.NoSuchMethodException | 检查异常 | 请求的方法不存在 | 检查调用方法是否存在,或者类是否编译 |
SQLException
异常摘要
IOException
异常摘要
JVM堆栈溢出
java.lang
类 OutOfMemoryError
因为内存溢出或没有可用的内存提供给垃圾回收器时,Java 虚拟机无法分配一个对象,这时抛出该异常。
常见案例
https://blog.csdn.net/zl1zl2zl3/article/details/90413759
解决方案:
Java堆出现内存溢出异常有两种解决方案。
一种是基于内存调整来改变堆区内存大小以便能够存储更多的对象,但堆内存受到物理内存的限制,当出现无法再扩展堆内存的情况时,就采用第二种方式,从代码上检查是否存在某些对象的生命周期过长、持有状态时间过长的情况,尝试减少程序在运行期的内存消耗。
java.lang
类 StackOverflowError
当应用程序递归太深而发生堆栈溢出时,抛出该错误。
解决方案:
解决StackOverflowError异常的方法同样有从内存大小和Java程序两个方面来解决问题。
从内存大小上,增加每个线程的虚拟机栈大小,这种方式虽然简便,但在多线程的情况下,随着每个线程所属的虚拟机栈的大小的增加,所能执行的线程也就随之减少了,但我们使用这种方式来解决StackOverflowError异常时,通常要权衡这两个反比因素。从Java程序上无疑就是检查是否出现方法的不合理递归调用,从而减少栈帧的创建和及时的回收。