Java中的异常处理

来源:互联网 发布:电商美工培训 编辑:程序博客网 时间:2024/06/07 02:24

异常就是抛出和捕获的过程,也就是try和catch,当保护代码块try中出现异常时,catch中的内容就会被检查。以下内容为参考了一些博客后加上自己理解的一些记录。

一、:什么是异常

《Think in java》中是这样定义异常的:异常情形是指阻止当前方法或者作用域继续执行的问题。异常包括错误,但是不仅仅是错误,比如使用0做除数时就会产生异常,打开一个没有的文件的时候也会产生异常。 那么什么时候才会出现异常呢?只有在你当前的环境下程序无法正常运行下去,这时它所就会从当前环境中跳出,并抛出异常。
其实异常就是你的程序无法正常执行了。

二、:java中异常的分类

Java中的异常是有很多的,不过可大体上分为三类:

检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个

在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。

        运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。

        错误: 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误

发生了,它们在编译也检查不到的。


所有的异常类是从java.lang.Exception类继承的子类。Exception类是Throwable类的子类。除了Exception类外,Throwable还有一个子类Error 。Java程序通常不捕获错误。错误一般发生在严重故障时,它们在Java程序处理的范畴之外。

异常类有两个主要的子类:IOException类和RuntimeException类。

Exception它又分为两种CheckedException(受捡异常),UncheckedException(不受检异常)。其中CheckException发生在编译阶段,必须要使用try…catch(或者throws)否则编译不通过。而不受检测的异常发生在运行期,具有不确定性,主要是由于程序的逻辑问题所引起的。IOException是编译异常,RuntimeException是运行异常

三、:throw和throws

对于我这样的初学者而言,这两个有点傻傻分不清,那就来从原理和使用方式上来辨析一下
throws是向上抛出异常,通常用在方法的末尾,表示的是程序即将抛出异常,我们可以将其理解为声明的作用,也就是声明将要抛出何种类型的异常,是向上抛出的,最终由其方法的调用者来处理异常。
throw是真实的抛出异常,是一个真实的抛出异常的语句,通常不单独使用,与try。。catch或者throws来配合使用。
package TwoWeek;public class Exception1 {public static void main(String args[]){try{        System.out.println(9/0);  }catch(Exception e){System.out.println(e.toString());}finally{System.out.println("继续执行");}}}
输出结果:java.lang.ArithmeticException: / by zero<span style="white-space:pre"></span>  继续执行

四、:自定义异常

Java确实给我们提供了非常多的异常,但是异常体系是不可能预见所有的希望加以报告的错误,所以Java允许我们自定义异常来表现程序中可能会遇到的特定问题,总之就是一句话:我们不必拘泥于Java中已有的异常类型。

所有异常都必须是Throwable的子类。

如果希望写一个检查性异常类,则需要继承Exception类。

如果你想写一个运行时异常类,那么需要继承RuntimeException 类。

Java自定义异常的使用要经历如下四个步骤:

       1、定义一个类继承Throwable或其子类。

       2、添加构造方法(当然也可以不用添加,使用默认构造方法)。

       3、在某个方法类抛出该异常。

       4、捕捉该异常。 

package TwoWeek;class MyException extends Exception{public MyException(String str){// 将异常的信息上传了super(str);}public void display(){System.out.println("哈哈");}}public class ExceptionSelf{public static void main(String args[]){ExceptionSelf test = new ExceptionSelf();try {        test.display(0);         } catch (MyException e) {        System.out.println(e.toString());       } }public void display(int i) throws MyException{        if(i == 0){              throw new MyException("这里有异常了");          }          else{              System.out.println(9/i);          }  }}

五、:异常方法

下面的列表是Throwable 类的主要方法:也就是其子类中都可以使用的。

1、public String getMessage() 返回发生异常的详细信息。

2、public Throwable getCause() 返回异常的原因。

3、public String toString() 返回类的串级名字。

4、public Stack printStackTrance() 打印错误输出流。

六、:总结

1、尽量减少try块,不能使用一个来包含所有的异常

2、充分利用所有的finally关键字,保证所有的资源都被释放

3、catch语言应该尽量指定具体的异常类型

4、要对捕获的异常做处理,不能简单的打印。



1 0