代码常见异常(持续更新)

代码常见异常(持续更新)

目录

代码常见异常(持续更新)

1、java.lang.NullPointerException(空指针异常)

2、java.lang.ClassNotFoundException(找不到该类异常)

3、java.lang.ArithmeticException(算术异常)

4、java.lang.ArrayIndexOutOfBoundsException(数组下标越界异常)

5、java.lang.IllegalArgumentException(参数异常)

6、java.lang.IllegalAccessException(没有访问权限异常)

7、java.lang.IncompatibleClassChangeError(不兼容类的变化错误)

8、java.lang.InstantiationError(实例化异常)

9、java.lang.LinkageError(连接错误)

10、java.lang.StackOverflowError(堆栈溢出)

11、java.lang.OutOfMemoryError(内存溢出异常)


1、java.lang.NullPointerException(空指针异常)

空指针异常:简单地说就是调用了未经初始化的对象或者是不存在的对象,这个错误经常出现在 创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时的路径错误等等。对数组操作中出现空指针,很多情况下是一些刚开始学习编程的朋 友常犯的错误,即把数组的初始化和数组元素的初始化混淆起来了。数组的初始化是对数组分配需要的空间,而初始化后的数组,其中的元素并没有实例化, 依然是空的,所以还需要对每个元素都进行初始化(如果要调用的话)。

//使用一下判断方式有效控制空指针异常
//判断String aa是否为hello
String aa = hello;
if("hello".equals(aa)){}

2、java.lang.ClassNotFoundException(找不到该类异常)

错误信息:找不到该类包

  1. 首先在项目文件中没有添加相应的jar包在依赖里看是否有jar包
  2. 如果有jar包。双击打开他,如果提示已经损坏需要重新下过,重新导入
  3. 最后的原因是没有将maven工程的jar包发布到部署的项目文件中。在内置的tomcat中没有生成lib依赖

3、java.lang.ArithmeticException(算术异常)

这个异常的解释是 “数学运算异常 “,比如程序中出现了除以零这样的运算就会出这样的异常,对这种异常,大家就要好好检查一下自己程序中涉及到数 学运算的地方,公式是不是有不妥了。

4、java.lang.ArrayIndexOutOfBoundsException(数组下标越界异常)

这个异常相信很多朋友也经常遇到过,异常的解释是 “数组下标越界 “,现在程序中大多都有对数组的操作,因此在调用数组的时候一定要认真检查,看 自己调用的下标是不是超出了数组的范围,一般来说,显示(即直接用常数当下标)调用不太容易出这样的错,但隐式(即用变量表示下标)调用就经常出错 了,还有一种情况,是程序中定义的数组的长度是通过某些特定方法决定的,不是事先声明的,这个时候,最好先查看一下数组的length,以免出现这个异常

5、java.lang.IllegalArgumentException(参数异常)

这个异常的解释是 “方法的参数错误 “,很多J2ME的类库中的方法在一些情况下都会引发这样的错误,比如音量调节方法中的音量参数如果写成负数就会 出现这个异常,再比如g.setColor(int red,int green,int blue)这个方法中的三个值,如果有超过255的也会出现这个异常,因此一旦发现这个异 常,我们要做的,就是赶紧去检查一下方法调用中的参数传递是不是出现了错误。

6、java.lang.IllegalAccessException(没有访问权限异常)

这个异常的解释是 “没有访问权限 “,当应用程序要调用一个类,但当前的方法即没有对该类的访问权限便会出现这个异常。对程序中用了Package的情 况下要注意这个异常。

7、java.lang.IncompatibleClassChangeError(不兼容类的变化错误)

不兼容的类变化错误。当正在执行的方法所依赖的类定义发生了不兼容的改变时,抛出该异常。一般在修改了应用中的某些类的声明定义而没有对整个应用重 新编译而直接运行的情况下,容易引发该错误

8、java.lang.InstantiationError(实例化异常)

实例化错误。当一个应用试图通过Java的new操作符构造一个抽象类或者接口时抛出该异常.

9、java.lang.LinkageError(连接错误)

链接错误。该错误及其所有子类指示某个类依赖于另外一些类,在该类编译之后,被依赖的类改变了其类定义而没有重新编译所有的类,进而引发错误的情况

10、java.lang.StackOverflowError(堆栈溢出)

堆栈溢出错误,一般都是使用递归的时候层次调用太深抛出的异常。原因在于 : 无限调用递归函数, 函数是以栈帧的形式存在于虚拟机栈内存中, 一直创建栈帧, 导致栈溢出.

11、java.lang.OutOfMemoryError(内存溢出异常)

  1. 检查代码中是否有死循环或递归调用。
  2. 检查是否有大循环重复产生新对象实体。
  3. 检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。
  4. 检查List、MAP等集合对象是否有使用完后,未清除的问题。List、MAP等集合对象会始终存有对对象的引用,使得这些对象不能被GC回收

或者是JVM内存设置过小,可以调大jvm内存,和优化代码,Java堆用于存储对象实例, 只要不断地创建对象, 并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制来清除这些对象, 那么在对象数量到达最大堆的容量限制后就会产生内存溢出异常. (摘抄自深入理解java虚拟机), 所以一直new String() 并不会造成堆内存溢出.

tomcat中java.lang.OutOfMemoryError: PermGen space异常处理

PermGen space的全称是Permanent Generation space,是指内存的永久保存区域,这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGen space中, 它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的应用中有很多CLASS的话,就很可能出现PermGen space错误, 这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的第三方jar, 其大小超过了jvm默认的大小(4M)那么就会产生此错误信息了。 解决方法: 手动设置MaxPermSize大小修改

 

参考文献----内存溢出错误详解

你可能感兴趣的:(技术杂记)