NO.01 java.lang.NullPointerException
异常的解释是“空指针异常”,当应用试图在要求使用对象的地方使用了null时,抛出该异常。譬如:调用null对象的实例方法、访问null对象的属性、计算null对象的长度、使用throw语句抛出null等等。
遇到的例子(jsp编程中经常出现):
if (request.getParameter(“username”).equals(“xxx”))
解决这个问题的方法是在使用前进行判空比较:
if (request.getParameter(“username”)!=null) {
if (request.getParameter(“username”).equals(“xxx”))
{…}
}
NO.02 java.lang.ClassNotFoundException
异常的解释是“指定的类不存在”,这里主要考虑一下类的名称和路径是否正确即可。
遇到的例子:
java.lang.ClassNotFoundException: org.springframework.web.filter.CharacterEncodingFilter
xml是配置有问题,找不到到类!
filter要找的类没有找到,仔细检查web.xml文件,应该是配置错了。
NO.03 java.lang.ArithmeticException
异常的解释是 “数学运算异常”,比如程序中出现(1/0)除以零的运算就会出这样的异常,对这种异常,好好检查一下自己程序中涉及到数学运算的地方,公式是不是有不妥了。
NO.04 java.lang.ArrayIndexOutOfBoundsException
异常的解释是“数组下标越界”,现在程序中大多都有对数组的操作,因此在调用数组的时候一定要认真检查,看自己调用的下标是不是超出了数组的范围,一般来说,显示(即直接用常数当下标)调用不太容易出这样的错,但隐式(即用变量表示下标)调用就经常出错了,还有一种情况,是程序中定义的数组的长度是通过某些特定方法决定的,不是事先声明的,这个时候,最好先查看一下数组的length,以免出现这个异常。
NO.05 java.lang.IllegalArgumentException
异常的解释是“方法的参数错误”,一般是方法调用中的参数传递出现了错误。比如音量调节方法中的音量参数如果写成负数就会出现这个异常。
遇到的例子:
java.lang.IllegalArgumentException
spring中出现的异常,由于版本问题导致无法运行!
右击Project--->Properties--->Project Facets:修改JDK版本,需要将1.8降为1.7版本。
NO.06 java.lang.IllegalAccessException
异常的解释是“没有访问权限”,当应用程序要调用一个类,但当前的方法即没有对该类的访问权限便会出现这个异常。对程序中用了Package的情况下要注意这个异常。
NO.07 java.lang.IllegalStateException
异常的解释是“违法的状态异常”,当在Java环境和应用尚未处于某个方法的合法调用状态,而调用了该方法时,抛出该异常
NO.08 java.lang.IllegalThreadStateException
异常的解释是“违法的线程状态异常”,当线程尚未处于某个方法的合法调用状态,而调用了该方法时,抛出异常。
NO.09 java.lang.InterruptedException
异常的解释是“被中止异常”,当某个线程处于长时间的等待、休眠或其他暂停状态,而此时其他的线程通过Thread的interrupt方法终止该线程时抛出该异常。
NO.10 java.lang.InstantiationException
异常的解释是“实例化异常”,当试图通过newInstance()方法创建某个类的实例,而该类是一个抽象类或接口时,抛出该异常。
NO.11 java.lang.IndexOutOfBoundsException
异常的解释是“索引越界异常”,当访问某个序列的索引值小于0或大于等于序列大小时,抛出该异常。
NO.12 java.lang.StringIndexOutOfBoundsException
异常的解释是“字符串索引越界异常”,当使用索引值访问某个字符串中的字符,而该索引值小于0或大于等于序列大小时,抛出该异常。
NO.13 java.lang.NoSuchFieldException
异常的解释是“属性不存在异常”,当访问某个类的不存在的属性时抛出该异常。
NO.14 java.lang.NoSuchMethodException
异常的解释是“方法不存在异常”,当访问某个类的不存在的方法时抛出该异常。
NO.15 java.lang.NumberFormatException
异常的解释是“数字格式异常”,当试图将一个String转换为指定的数字类型,而该字符串确不满足数字类型要求的格式时,抛出该异常。
NO.16 java.lang.TypeNotPresentException
异常的解释是“类型不存在异常”,当应用试图以某个类型名称的字符串表达方式访问该类型,但是根据给定的名称又找不到该类型是抛出该异常。
该异常与(NO.02)ClassNotFoundException的区别在于:
TypeNotPresentException异常是unchecked(不被检查)异常,
而ClassNotFoundException是checked(被检查)异常。
NO.17 java.lang.reflect.InvocationTargetException
InvocationTargetException异常由Method.invoke(obj, args...)方法抛出。当被调用的方法的内部抛出了异常而没有被捕获时,将由此异常接收!!!
问题分析及解决方法:
由于采用反射机制,我们捕捉到的异常是java.lang.reflect.InvocationTargetException,但这个异常的message为null,而这个异常是我们的方法所抛出的异常引起的(即异常引起的异常)。
故要获取方法真正的异常,需要通过e.getTargetException()取出来,或者用e.getCause()来捕捉异常。
附加信息:
e.getMessage(); 只会获得具体的异常名称. 比如说NullPoint 空指针,就告诉你说是空指针。
e.getCause().getMessage(); 这样的话就会获取到具体的错误原因。