一、JDK常见的异常情况
1.常见异常总结图
2、java中异常分类
Throwable有两个直接子类:
(1)Exception:问题可以捕获
(2)Error:通常由于系统错误JVM处理
3.被捕获的异常分类
(1)Check异常: 派生自Exception的异常类,必须被捕获或再次声明抛出
(2)Runtime异常:派生自RuntimeException异常类别throw这种异常对象可以随时抛出 throw new ArithmeticException(…);
二、异常原因
用户输入非法数据。
不存在要打开的文件。
3.网络通信是连接中断
4、JVM内存溢出
三、java程序中常见的几种异常及其原因
1、java.lang.NullpointerException(空指针异常)
原因:这种异常经常发生。异常的原因是程序中有空指针,即未初始化或不存在的对象被调用到程序中。
它经常出现在创建对象和调用数组代码中,如对象未初始化或图片创建时路径错误。对数组代码
空指针的出现混淆了数组的初始化和数组元素的初始化。数组的初始化是数组分配空间,而数组元素
初始化是赋予数组中元素初始值
2、java.lang.ClassNotFoundException(指定类不存在)
原因:试着做一个String将类型数据转换为指定的数字类型,但当字符串不满足数值数据的要求时,抛出这种异常
常。例如将String类型的数据"123456"当转换为数值数据时,可以转换。但如果是String包含类型数据
非数字字符,如123*56.当转换为数值型时,会出现异常。系统会捕捉到这种异常并进行处理
3、java.lang.ClassNotFoundExceptio(指定类不存在)
原因:由于类别的名称和路径不正确,程序试图通过字符串加载某个类别可能会导致异常。
调用Class.forName(),或调用ClassLoad的finaSystemClass()或LoadClass()出现异常
4、java.lang.IndexOutOfBoundsException(数组下标越界异常)
原因:检查程序中调用的数组或字符串的下标值是否超过数组的范围。一般来说,显示调用数组并不容易
样本错误,但隐式调用可能会出错。在另一种情况下,程序中定义的数组长度由某些特定方法决定,而不是
提前声明,此时可以先查看数组length,避免这种异常
5、java.lang.IllegalArgumentException(方法参数错误)
例如g.setColor(int red,int green,int blue)如果这种方法中的三个值超过255,如果程程
如果序列中有此异常,请检查方法调用中的参数传输或参数值是否错误
6、java.lang.IllegalAccessException(无访问权限)
当程序需要调用一个类,但目前的方法是,如果没有访问权限,就会出现这种异常。如果在程序中使用Package的情况下
这种异常可能发生
7、java.lang.ArithmeticException(数学运算异常)
当数学运算中出现除以零的运算时,就会出现这样的异常。
8、java.lang.ClassCastException(数据类型转换异常)
当试图强制向下转换对象,但对象不能转换或不能转换为子类时,就会出现异常
9、 java.lang.FileNotFoundException(文件未发现异常)
当程序打开不存在的文件进行读写时,会导致异常。异常是由于FileInputStream,FileOutputStream,
RandomAccessFile即使操作文件存在,由于某些原因无法访问构造器声明,个
只读取权限文件并将数据写入其中,上述结构方法仍会引起异常
10、java.lang.ArrayStoreException(数组存储异常)
当试图将类型存储为不兼容对象时Object[]数组时会引起异常
11、java.lang.NoSuchMethodException(方法无异常)
当程序试图通过反射创建对象时,访问(修改或读取)某种方法,但不存在会导致异常。
12、 java.lang.EOFException(文件已结束异常)
当程序在输入过程中遇到文件或流程结束时,会引起异常。因此,异常用于检查文件或流程的结束
13、java.lang.InstantiationException(实例异常)
当试图通过Class的newInstance()创建某一类的例子的方法,但程序不能通过构造器创建对象。
Class对象表示抽象、接口、数组类、基本类型 。该Class没有相应的相应的结构器。
14、java.lang.InterruptedException(中止异常)
当一个线程处于长期等待、休眠或其他暂停状态时,其他线程通过Thread的interrupt该方法在终止线程时抛出异常。
15、java.lang.CloneNotSupportedException (不支持克隆异常)
当没有实现Cloneable当接口或不支持克隆时,调用它clone()法则抛出异常
16、java.lang.OutOfMemoryException (内存不足错误)
当可用内存不足以让Java当虚拟机分配给对象时,抛出错误
17、java.lang.NoClassDefFoundException (未发现类定义错误)
当Java虚拟机或类装载器试图将某一类实例化,但在找不到该类定义时抛出错误
四、Java总结异常处理。
1.不要丢弃异常。捕获异常后,需要进行相关处理。如果用户觉得异常处理不好,
让它继续传播,传播到其他地方处理,或将低级异常转化为应用级异常,
重新抛出
2、catch句子应指定特定的异常类型。不应捕获的异常也不能捕获
3、在finally释放资源finally它也会抛出异常,也需要使用try..catch处理
4.不要在代码上插入大量代码try...catch在块中,分离每个可能出现异常的句子并捕获异常
5.由于输出的数据可能不完整,用户需要进行相应的处理,至少提示数据不完整