Java常见异常类型及其原因分析

NullPointerException 异常

  顾名思义,NullPointerException是指空指针异常,JAVA中没有指针的概念,但是JAVA中的引用,也是要指向一个实例对象的(通过new方法构造),从这种意义上说,JAVA中的引用与C++中的指针没有本质上的区别,不同的是出于安全的目的,在JAVA中不能对引用直接操作,而在c++中可以直接对指针进行操作。所以本质差不多,是因为引用没有指向具体的实例对象,当访问这个引用的方法的时候就会产生这种异常。
通常这种NullPointerException的异常产生会是以下两种情况

  1. 把调用某个方法的返回值直接赋值给某个引用,然后调用这个方法的引用。在这种情况下,如果返回的值是Null,必然产生NullPointerException异常。比如下面这个例子
    1
    2
    3
    4
    5
    public static void main(String[] args){
    People p = null;//这里只是声明没有创建
    p.setName("张三");
    System.out.println(p.getName());
    }
  1. 在方法体中调用参数的方法
    在这种情况下,如果调用方法的时候传递进来的值是Null,也会产生NullPointerException异常。通常编译器会提醒哪一句错了,然后查看调用那个对象的方法,检查这个对象为什么没有赋值即可。
    要想避免这种异常,可以在调用前进行判断
    1
    2
    3
    if(str!=null){
    System.out.println(str.length);
    }

ClassCastException 异常

  从字面上看,是类型转换错误,通常是进行强制类型转换的时候发生的错误。
在不确定要访问对象的类型的时候,有两种方法进行处理

  1. 通过o.getClass().getName()得到具体的类型,可以通过输出语句输出这个类型,然后处理
  2. 通过if(o instanceof 类型) 的语句来判断o的类型是什么

    ArrayIndexOutOfBoundsException 异常

    数组下标越界异常,解决方法就是查看为什么下标越界
    Alt text
    从这些提醒信息中可以获取如下信息:
  3. 错误发生在第93行
  4. 发生错误的时候下标值是 2
    接下来分析为什么为2时越界就可以了

    UnsupportedClassVersionError

    错误提醒如下
    Alt text
    错误原因
    编译JAVA和运行JAVA所使用的JAVA版本不一致
    解决方案,统一JAVA版本

    NumberFormatException异常

      数字转换异常,在把一个表示数字的字符串转换成数字类型的时候可能会报这个异常,
    原因是作为参数的字符串不是由数字组成的

    堆栈溢出和内存溢出

      在递归调用的时候可能会产生堆栈溢出情况,因为在递归调用的时候需要把调用的状态保存起来,如果递归一定深度,将会产生堆栈的异常
    如果虚拟机内存比较小,而程序对内存要求高,可能产生内存溢出错误

常见的异常类

异常 说明
RuntimeException Java.lang 包中多数异常的基类
ArithmeticException 算数错误,如除数为0
IllegalArgumentException 方法收到非法参数
SecurityException 试图违反安全性
ClassNotFoundException 不能加载到请求的类
AWTException AWT中的异常
IOException I/O根类异常
FileNotFoundException 文件没有找到异常
EOFException 文件结束
IllegalAccessException 对象类的访问被拒绝
NoSuchMethodException 请求的方法不存在
InterruptedException 线程中断
-------------End Of This ArticleThank You For Reading-------------