Java异常处理机制2014-05-29 iteye cq520异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。比如说,你用System.out.println(5/0),那么你是因为你用0做了除数,会抛出java.lang.ArithmeticException的异常。 有些异常需要做处理,有些则不需要捕获处理,在下面会详细讲到。天有不测之风云,人有旦夕祸福,Java的程序代码也如此。在编程过程中,首先应当尽可能去避免错误和异常发生,对于不可避免、不可预测的情况则应考虑异常发生时如何处理。而在Java中的异常用对象来表示,Java对异常的处理是按异常分类处理的,不同异常有不同的分类,每种异常都对应一个类型(class),每个异常都对应一个异常(类的)对象。异常类从哪里来?有两个来源,一是Java语言本身定义的一些基本异常类型,二是用户通过继承Exception类或者其子类自己定义的异常。Exception 类及其子类是 Throwable 的一种形式,它指出了合理的应用程序想要捕获的条件。异常的对象从哪里来呢?有两个来源,一是Java运行时环境自动抛出系统生成的异常,而不管你是否愿意捕获和处理,它总要被抛出!比如除数为0的异常。二是程序员自己抛出的异常,这个异常可以是程序员自己定义的,也可以是Java语言中定义的,用throw 关键字抛出异常,这种异常常用来向调用者汇报异常的一些信息。异常是针对方法来说的,抛出、声明抛出、捕获和处理异常都是在方法中进行的。Java异常处理通过5个关键字try、catch、throw、throws、finally进行管理。基本过程是用try语句块包住要监视的语句,如果在try语句块内出现异常,则异常会被抛出,你的代码在catch语句块中可以捕获到这个异常并做处理;还有部分系统生成的异常在Java运行时自动抛出。你也可以通过throws关键字在方法上声明该方法要抛出异常,然后在方法内部通过throw抛出异常对象。说到这里,可能很多人都不知道throws和throw的区别,其实很简单,throw用来抛出一个异常,在方法体内。语法格式为:throw 异常对象。 throws用来声明方法可能会抛出什么异常,在方法名后,语法格式为:throws 异常类型1,异常类型2...异常类型n。 如下:Java代码
import java.io.IOException;public class ThrowsAndThrow {public void test(int a,int b)throws IOException,ArrayIndexOutOfBoundsException{int c=a/b;if(b==0){throw new ArithmeticException();}}}catch语句可以有多个,用来匹配多个异常,匹配上多个中一个后,执行catch语句块时候仅仅执行匹配上的异常。如果你不理解这句话的意思,可以运行一下下面这段代码:Java代码
package 完整的异常处理示例;import java.io.*;public class TestException2 {public static void main(String args[]){int x,y,result;x=5;int a[]={0};try{InputStreamReader reader=new InputStreamReader(System.in);BufferedReader input=new BufferedReader(reader);System.out.println("输入除数:");//读取一行中输入的数字y=Integer.parseInt(input.readLine());result=x/y;a[10]=5;System.out.println(result);System.out.println("发生异常时不会被执行的语句");}catch(ArrayIndexOutOfBoundsException e){//数组越界异常System.out.println("对数组越界异常进行了处理");}catch(ArithmeticException e){System.out.println("对算术异常进行了处理");}catch(Exception e){System.out.println("对异常进行了处理");return;}}}