1、Java中的异常会被分为三种:
- Error: 这种异常被设计成不被捕获,因为这种异常产生于JVM自身。
- Runtime Exception: 运行时异常往往与环境有关,编译时无法检查,并且可能发生的情况太广泛,所以系统会去处理,程序不需要捕获。
- 普通异常: 常见的异常大多属于此类。
这些java异常直接继承java.lang.Throwable的异常类:
- java.lang.Throwable
- java.lang.Error
- java.lang.Exception
- java.lang.RuntimeException
java.lang.Throwable
java.lang.Error
java.lang.Exception
java.lang.RuntimeException
java异常分为可检查异常(checked exceptions)和不可检查异常(unchecked exceptions)。
可检查异常:除了RuntimeException异常及其子类,其他都是可查异常。这种异常,java编译器会进行检查,即,当程序中出现这种异常,可以用try-catch或者throws进行处理,否则编译不会通过。
不可检查异常:包括运行时异常及其子类和error。
1. runtimeException子类:
1、 java.lang.ArrayIndexOutOfBoundsException
数组索引越界异常。当对数组的索引值为负数或大于等于数组大小时抛出。
2、java.lang.ArithmeticException
算术条件异常。譬如:整数除零等。
3、java.lang.NullPointerException
空指针异常。当应用试图在要求使用对象的地方使用了null时,抛出该异常。譬如:调用null对象的实例方法、访问null对象的属性、计算null对象的长度、使用throw语句抛出null等等
4、java.lang.NegativeArraySizeException 数组长度为负异常
5、java.lang.ArrayStoreException 数组中包含不兼容的值抛出的异常
6、java.lang.SecurityException 安全性异常
7、java.lang.IllegalArgumentException 非法参数异常
8、ClassCastException 类型转换异常类
9、ArrayStoreException 数组中包含不兼容的值抛出的异常
10、NumberFormatException 字符串转换为数字抛出的异常
11、StringIndexOutOfBoundsException 字符串索引超出范围抛出的异常
2.Exception
IOException:操作输入流和输出流时可能出现的异常。
EOFException : 文件已结束异常 父类是IOException
FileNotFoundException: 文件未找到异常 父类是IOException
SQLException 操作数据库异常类
NoSuchFieldException 字段未找到异常
NoSuchMethodException 方法未找到抛出的异常
IllegalAccessException 不允许访问某类异常
InstantiationException 当应用程序试图使用Class类中的newInstance()方法创建一个类的实例,而指定的类对象无法被实例化时,抛出该异常
ClassNotFoundException 找不到 类异常。当应用试图根据字符串形式的类名构造类,而在遍历CLASSPAH之后找不到对应名称的class文件时,抛出该异常。
3、异常处理
try-catch-finally/throws
1)执行try,出现异常,执行catch(找到一个异常类型匹配的,其他不执行),执行finally。执行finally之后,try异常之后的不执行。
2)执行try,出现异常,执行catch,没有匹配catch, 此异常将会抛给JVM处理,finally语句块里的语句还是会被执行,但finally语句块后的语句不会被执行。
3)执行try,出现异常,执行catch,执行finally,如果三个块中都有return,则先执行finally,