异常

来源:互联网 发布:二元期权编程自动交易 编辑:程序博客网 时间:2024/05/16 06:00

异常

参考:http://www.cnblogs.com/xiohao/p/3547443.html


在java程序运行时,常常会出现一些非正常的现象,这种情况被称为运行错误。根据其性质分为“错误”和“异常”。所有抛出(throw)的异常都必须被从Throwable派生而来。类Throwable有两个直接子类。Error类和Exception类。


什么是错误

Java对应的错误类为Error类。Error类对象由Java虚拟机生成并抛弃。这种情况下,程序运行时本身无法解决,只能通过其他程序干预。常见的错误有:死循环、内存泄露等。


什么是异常

Java对应的异常类为Exception类。异常是程序执行时遇到的非正常的情况或意外行为。Exception类对象是Java程序处理或抛弃的对象。Java语言中异常分为两种。一种为通过throw语句,程序员在代码中抛出的异常。另外一种是系统运行时的异常,程序员实际上完全可以避免它,只要我们写代码时足够小心严谨。前一种异常被称为Checked Exception即检查异常或者非运行时异常,后一种异常被称为Runtime Exception即运行时异常。
异常不同于错误,程序运行时本身可以解决,由异常代码调整程序运行方向、使程序仍可继续进行,直至结束。


什么是非运行时异常

Checked Exception从java.lang.Exception类衍生而来。Java编辑器要求程序必须捕获或者声明所有的非运行时异常。通俗一点来讲就是javac可以检查到的异常。常见的非运行时异常有IOException。


什么是运行时异常

Runtime Exception从java.lang.RuntimeException类衍生而来。javac无法通过编译时的静态语法检测来判断这类异常,这完全取决于运行时态,或者说运行态所决定的。但是java虚拟机却需要有效地捕获并处理这类异常。当然,Runtime Exception也可以被程序员显示抛出。常见的运行异常有“数组越界”“除数为零”“空指针”等。


throw和throws

throw是语句抛出一个异常。
语法

throw(异常对象);        throw e;

throws是方法可能抛出异常的声明。(用在声明方法时,表示该方法可能要抛出异常)。
语法

[(修饰符)](返回值类型)(方法名)([参数列表])[throws(异常类)]{......}    public void doA(int a) throws Exception1,Exception3{......}

trow 语句用在方法体内,表示抛出异常,由方法体内的语句处理。
throws语句用在方法声明后面,表示再抛出异常,由该方法的调用者来处理。

throws主要是声明这个方法会抛出这种类型的异常,使它的调用者知道要捕获这个异常。
throw是具体向外抛异常的动作,所以它是抛出一个异常实例。

throws说明你有那个可能,倾向。
throw的话,那就是你把那个倾向变成真实的了。

举例

void doA(int a) throws IOException{           try{                 ......           }catch(Exception1 e){              throw e;           }catch(Exception2 e){              System.out.println("出错了!");           }           if(a!=b)              throw new  Exception3("自定义异常");            }

代码块中可能会产生3个异常,(Exception1,Exception2,Exception3)。
如果产生Exception1异常,则捕获之后再抛出,由该方法的调用者去处理。
如果产生Exception2异常,则该方法自己处理了(即System.out.println(“出错了!”);)。所以该方法就不会再向外抛出Exception2异常了,void doA() throws Exception1,Exception3 里面的Exception2也就不用写了。
而Exception3异常是该方法的某段逻辑出错,程序员自己做了处理,在该段逻辑错误的情况下抛出异常Exception3,则该方法的调用者也要处理此异常。

总结:

throw关键字用于方法体内部,用来抛出一个Throwable类型异常。如果抛出了检查异常,则还应该在头部声明方法可能抛出的异常类型。
throws关键字用于方法体外部的方法声明部分,用来声明方法可能会抛出的某些异常。

0 0
原创粉丝点击