java异常处理和异常分类
一、背景信息:
异常才是程序遇到的最场景的情况。一段具有某种功能或者达到某种效果的程序,在理想的情况下,是完美的。这里的理想情况是程序不会遇到处理不了的异常,然后在大部分生产关系下,会面临各种各样的异常:IO错误、网络异常、不合法数据、容器越界、内存溢出等等。所以异常才是正常的情况。
面对着形形色色的异常,我们如果仅仅只是模式化的运用着JAVA的异常处理机制,很明显是不够的,还需要了解异常的分类、异常的含义以及如何正确处理异常。
二、JAVA的异常处理机制
Java的异常处理机制本质上有两种:抛出异常和捕获异常。
抛出异常指的是当程序发生异常时,不因此而终止程序的执行,而是往程序外部抛出异常,期待程序外部处理异常。
关键字:
• throw -- 用于抛出异常。
• throws -- 用在方法签名中,用于声明该方法可能抛出的异常。
例如
public static void main(String[] args) throws Exception {
String Exception = "Exception";
if ("Exception".equals(Exception)){
System.out.println("抛出异常");
throw new Exception("Exception");
}
}
捕获异常指的是当程序发生异常时,不因此而终止程序的执行,而是在将该异常捕获并处理,已达到继续正确运行的目的。
关键字:
• try -- 用于监听。将要被监听的代码(可能抛出异常的代码)放在try语句块之内,当try语句块内发生异常时,异常就被抛出。
• catch -- 用于捕获异常。catch用来捕获try语句块中发生的异常。
• finally -- finally语句块总是会被执行。它主要用于回收在try块里打开的物力资源(如数据库连接、网络连接和磁盘文件)。只有finally块,执行完成之后,才会回来执行try或者catch块中的return或者throw语句,如果finally中使用了return或者throw等终止方法的语句,则就不会跳回执行,直接停止。
public static void main(String[] args) {
try {
System.out.println("监听异常");
}catch (Exception e){
System.out.println("处理异常");
}finally {
System.out.println("总是执行");
}
}
三、Java的异常分类如下图:
Throwable是所有异常的超类,继承自Serializable(序列化类),他有两个直接子类:Exception(异常)和ERROR(错误)。
ERROR的子类有42个(JDK1.8,后续的jdk有可能继续增加),他指的是程序无法处理的错误,如
- VirtualMachineError(虚拟机的错误)下面有五个error:
InternalError(内部错误)、OutOfMemoryError(虚拟机内存溢出错误)、*Error(栈溢出错误)、UnknownError、和InternalError的子类ZipError。
- NoClassDefFoundError错误的发生,是因为Java虚拟机在编译时能找到合适的类,而在运行时不能找到合适的类导致的错误。
- NoSuchMethodError一般是jdk的版本原因。
Exception可分为运行时异常和非运行时异常。
1、运行时异常一般是由于程序的逻辑错误引起的,程序应该从逻辑角度尽可能的避免这些异常。运行时异常的超类是:RuntimeException,常见的RuntimeException有ArrayIdexOutOfBoundsException—一访问数组元素下标越界,引起异常;
- ClassCastException—一当把一个对象归为某个类,但实际上此对象并不是由这个类 创建的,也不是其子类创建的,则会引起异常;
- ParseException:格式转换引起的异常。
- NullPointerException—一程序试图访问一个空的数组中的元素或访问空的对象中的 方法或变量时产生异常;
2、非运行时异常,从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。是RuntimeException以外的异常,大部分都属于Exception类及其子类
- FileNotFoundException——未找到指定文件引起异常;
- NoSuchMethodException一所调用的方法未找到,引起异常;
上一篇: 设置Web浏览器的HTTP或HTTPS代理(设置网页IP代理)
下一篇: 一切皆对象(2)
推荐阅读
-
SQLserver2000 企业版 出现"进程51发生了严重的异常"错误的处理方法
-
C# 网络连接中异常断线的处理:ReceiveTimeout, SendTimeout 及 KeepAliveValues(设置心跳)
-
C#异常处理的技巧和方法
-
MVC异常处理详解
-
Java连载63-异常处理try...catch...、方法getMessageyu printStackTrace
-
Object类和异常
-
C#中try catch中throw ex和throw方式抛出异常有何不同
-
java中如何靠着throw抛出一个异常来停止线程
-
Python中的异常处理简明介绍
-
对于Python异常处理慎用“except:pass”建议