java 异常处理

来源:互联网 发布:个人知识管理系统java 编辑:程序博客网 时间:2024/06/06 00:49

概述:
        java异常处理主要是依赖于try,catch,finally,throw,throws.一般情况下,我们是将可能会引起异常的代码块放在try块之中。如果在try中的代码出现了异常,程序就会生成一个Exception对象,然后根据catch块之中声明的异常类,判断该使用哪一个catch块进行处理异常。在一个try块之后可以跟多个catch块。finall块主要用于关闭在try块里打开的资源。异常处理机制保证finall块里面的代码一定可以执行。


注:在try块里面的声明的变量是局部变量,不可以在catch块里面访问。




java 捕获异常流程

try{   //业务逻辑代码}catch(ExceptionClass c1){ //异常处理代码}catch(Exception c2){//异常处理代码}

     在java中异常捕获是按照catch离try块的优先级进行的,也就是说会优先考虑紧跟在他后面的catch块,如果不是匹配的异常类的话就在向下寻找。所有catch块的安排并不是随意的,先把范围最小的异常类放在最前面,然后依次向后写,当然不一定要这样,具体可以按照自己的业务逻辑来编写。


在java7中提供了多异常捕获,使用方法:

try{//业务逻辑代码}catch(IndexOutOfBoundsException|NumberFormatException e){//异常处理代码}

java7使用(|)来进行多异常捕获,但是当进行多异常捕获时,异常变量(e)是默认·使用final 的。

在catch块中可以通过异常类的几个函数获得错误信息。
1.getMessage(); 返回异常的详细描述信息字符串
2.printStackTrace(); 将异常的跟踪栈信息输出到标准错误输出流
3.getStackTrace(); 返回异常的跟踪栈信息。


使用finally回收资源
这里fianlly的回收资源跟java的垃圾回收机制有很大的区别,垃圾回收机制是回收在内存之中不在使用的对象,而finally是回收打开的物理资源,比如数据库连接,磁盘文件等。在finally里面的代码无论是否发生异常都会得到执行。即使在try块或者catch块之中使用了return语句,也会先跳转到finally,执行完finally的代码之后在回到try或者catch块。所以要避免在finally里面使用return等语句,这样会使try或者catch块代码失效。


异常处理的嵌套

try{//业务逻辑代码}catch(Exception e){ //处理异常代码     try{     //业务逻辑代码      }catch(Exception e){      //异常处理代码      }}

java7的自动关闭资源
可以在try之后使用一个()来声明要初始化资源,这代表在执行完之后,java7会自动关闭这些资源,不过他们都必须实现AutoCloseable或者Closeable接口。不过不用担心自己要写很多代码,其实java7已经几乎把所有可能用到的“资源类”都实现了以上接口。


java的throws声明抛出异常
当遇到一个不知道该怎么处理的异常时,可以使用throws来抛出这个异常,把它交给调用者来处理,一直回溯到main().如果main()也不知道如何处理,就会交给JVM进行处理。它会打印错误信息,并且终止程序的运行。


隐藏原始错误信息
在进行开发的时候总是会出现各种各样的异常,但是很多异常的错误信息对于用户来说是没有用的,他们并不会想知道IndexOutOfBoundsException的错误信息。这个时候就可以使用 catch叫throw(不是throws)来构成异常链。

try{//业务逻辑代码}catch(IndexOutOfBoundsException e){throw new Exception("输入的数据量错误");}
0 0