异常
简单来说异常就是程序中的一些错误或者说是不正常的存在。
首先异常分为两大类:
- 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。