Java异常处理
1:什么是异常
异常(Exception)也叫异常。在Java编程语言中,异常就是程序在运行过程中由于硬件设备问题、软件设计错误、缺陷等导致的程序错误。
1.1:想打开的文件不存在
1.2:网络连接中断
1.3:操作数据超出预定范围
1.4:正在装载的类文件丢失
1.5:访问的数据库打不开 等
2:异常处理机制
2.1:在java程序执行过程中,如果出现了异常的事件,就会生成一个异常对象。这个对象可能是由正在运行的方法生成,也可能是java 虚拟机生成,其中包含一些指明异常事件的类型以及当异常发生时程序运行状态等
Java语言提供了两种处理异常的机制
2.1.1:捕获异常
在java程序运行过程中系统得到一个异常对象时,它将沿着方法的调用栈逐层回溯,寻找处理这一异常代码。找到后,运行时系统把当前异常对象交给这个方法进行处理,这一过程叫做捕获异常。
2.1.2:声明抛弃异常
当java程序运行中,系统得到一个异常对象时,如果一个方法并不知道如何处理所出现的异常,则可在该方法声明时,声明抛弃(Throws)异常
2.2:异常处理的层次
Java中异常事件分为两大类。一类继承是Error Object --->Throwable -->Error 另一类是 Exception Object-->Throwable-->Exception
在Exception之下还有一些子类,其中继承于RuntimeException的类代表的是Java虚拟机在运行时所生成的异常,这些异常叫做运行时异常,其他继承与类Exception的子类则代表非运行时异常。
常见的运行时异常有以下几种。
类型转换异常 ClassCastException
数组超界异常ArrayIndexOutBoundsException
指定数组维数为负值异常 NegativeArraySizeException
算术异常 ArithmeticException
Java内部异常 InternalException 即JVM抛出的异常
内存溢出的异常 OutOfMemeoryException
没有找到类定义异常 NoClassDefFoundException
空指针异常 NullPointerException
常见的非运行时异常
ClassNotFoundException :找不到类或接口所产生的异常
CloneNotSupportedException :使用对象的clone方法但无法执行Cloneable所产生的异常
IllegalAccessException :类定义不明确所产生的异常
IOException:一般情况下不能完成I/O操作所产生的异常。
EOFException:打开文件没有数据可以兑取所产生的异常
FileNotFoundException:在文件系统中找不到文件名称或路径时所产生的异常
3:异常的处理
对于运行时异常,Java编译器允许程序不对它们做出处理;但是对于非运行时异常,则要求程序必须做捕获或者声明抛弃处理,否则是无法通过程序编译的。
3.1一个方法中如果对某种类型的异常对象提供了相应的处理代码,则这个方法可捕获该中异常。捕获异常用try-catch-finally语句实现
3.1.1 try
捕获异常的第一步是用try{ }选定捕获异常的范围,由try所限定的代码块中的语句在执行过程中可能会生成异常对象并抛弃。
3.1.2 catch
每一个try代码块可以可以伴随一个或多个catch语句,用于处理try代码块中所生成的异常事件。Catch语句只需要一个形式参数来指明它所能够捕获的异常类型,这个类必须是Throwable的子类,运行时系统同错参数值把被抛弃的异常对象传递给catch块。捕获异常的顺序和catch语句的顺序有关,当捕获一个异常后,剩下的catch语句就不在进行匹配。因此,在安排catch语句的顺序时,首先应该捕获最特殊的异常,然后再逐渐一般化。也就是说,一般先安排子类,再安排父类
3.1.3 finally
捕获异常的最后一步是通过finally语句为异常处理提供了一个统一的出口。一般用来关闭文件或释放资源
3.2 声明抛弃异常
如果在一个方法中生成了一个异常,但是这个方法并不确定的知道如果对这一异常进行处理,这时,该方法就应该声明抛弃异常,使得异常对象可以从调用栈向后传播,知道有合适的方法捕获它为止;声明抛弃异常是在一个方法声明的throws子句中指明的。
3.3 抛出异常
抛出对象就是产生异常对象的过程,首先要生成异常对象,异常或由虚拟机生成,或者由某些类的实例生成,也可以在程序中生成。在方法中,抛出异常对象时通过throw语句实现的