简单来说异常就是程序中的一些错误或者说是不正常的存在。 首先异常分为两大类:
Error:这种异常更该说是错误,是比较严重的一类错误。说严重,其实是因为这些错误是JVM监管范围外的,可以捕获它,但是JVM无法解决掉。比如,网线断了,或者计算机硬件之类的问题。Exception:这算是真正意义上的异常,和上面的error相比,它的问题我们是既可以捕获也可以解决的。首次这类异常一般分为编译时异常和运行时异常。1、编译时异常:Exception: 在编译时出现的异常,一般会强制要求处理,不然无法编译。 这类异常一般对程序影响在编译时的各类语法问题。或者是java内置的异常处理来规定的错误,如在线程和流中就会有很多类似的异常需要在编译时就处理好,处理方式下面会介绍。 介绍几个常见的编译时异常: (1)线程 Thread java.lang.InteruptedException 线程异常中断异常 ava.util.concurrentException 线程执行异常 (2)流 Flow: java.io.IOException 创建文件单目录不存在(读写都可能出现) java.io.FileNotFoundException 文件不存在异常(一般针对读取流,写 一般会创建) java.io.NotSerializableException 不可序列化异常 需要序列化的对象没有实现Serializable接口
2、运行时异常:RuntimeException :程序运行之后出现的异常,一般都是在程序编写或者逻辑上存在的问题,这类问题在程序编写时不会报错,也不会强制处理,只有在程序运行之后才会让程序非正常停止。常见的运行时异常有: java.lang.InputMismatchException 输入不匹配异常 java.lang.AritthmeticException 算术异常 java.lang.ArrayindexOutException 数组下标越界异常 java.lang.NumberFormatException 数值格式异常 java.lang.NullPointerException 空指针异常 java.lang.ClassCastException 类转换异常 java.io.IOException 输入输出异常
3.接下来介绍一下处理异常的三种方法(分为两类) (1)程序逻辑:一般程序编写都有一定的逻辑,我们根据在所规定的逻辑来编写程序就不会有问题,这也就要求我们在编写程序是要考虑到各个方面的程序逻辑,只有考虑周到了才能避免异常的出现,不过这种处理方式一般是用来处理运行时异常RuntimeException。
(2)异常机制:java内置类一套比较完整的异常处理机制,除去程序逻辑的问题外,我们还有一些比较棘手的编译时异常,下面就是另外两种处理异常的方法。 ①捕获:一般是JVM不能处理的,或者不能交给JVM处理的异常。只能程序员自己处理这,这里是异常处理的最终形式,直接处理,JVM无法修复的
Try{ //可能出现异常的代码块 }catch(Exception ex){ Sout(ex.getMessage()); }finally{ 释放资源(比如:lock.unlock()/关闭文件流/) }②抛出:这里是可以采用将异常交给JVM处理的方法来解决编译时的异常,一般是在程序执行过程中处理,也就是交给别人处理 在出现
Public xxx method(xxx...)throws XxxException **[A]**{ If(...){ Thow new Exception (“...”;)**[B]** 如果A是运行时异常,可以不声明 ... } }在一些特定的地方会出现编译错误,这类错误我们可以通过抛出的方法交给别人处理,通过邮件报异常的地方,将异常抛出。要注意的是这里的异常A的包含范围要大于B。这样才可以将B抛给A。