Java异常处理错误

来源:互联网 发布:php get上传 编辑:程序博客网 时间:2024/05/17 23:26

Java异常处理错误

       发现错误的最佳时期是在编译阶段,也就是在你运行程序之前。然而,编译期间并不能找出所有的错误,余下的问题必须在运行阶段解决。这就需要错误源通过某种方式把适当的信息传给某个接收者,该接收者知道如何处理这个问题。

       Java中的异常处理的目的在于通过使用少于目前数量的代码来简化大型,可靠的程序的生成,并且通过这种方式可以使你更加自信:你的应用中没有未处理的错误。

       异常这个词有我对此感到意外的意思。问题出现了,你也许不清楚该如何处理,但你的确知道不该置之不理;你要停下来,看看是不是有别人是不是在别的地方,能够处理这个问题。只是在当前的环境中还没有足够的信息来解决这个问题,所以把问题提交到更高级别的环境中,在这里将作出正确地决定。

        使用异常所带来的另一个相当明显的好处是:它往往能够降低错误处理代码的复杂度。如果不使用异常,那么就必须检查特定的错误,并在程序的许多地方去处理它。而如果使用异常,就不必在方法调用处进行检查,因为异常机制将能保证捕获这个错误。并且,只需在一个地方处理错误,即所谓的异常处理程序中。这种方式不仅节省代码,而且把“描述在正常执行过程中做什么事”的代码和“出了问题怎么办”的代码相分离。

异常处理的过程:

       当抛出异常之后,有几件事情会随之发生。首先,同Java中其他对象的创建一样,将使用new在堆上创建异常对象。然后,当前的执行路径被终止,并且从当前环境中弹出对异常对象的引用。此时,异常处理机制接管程序,并开始寻找一个恰当的地方来继续执行程序。这个恰当的地方就是异常处理程序,它的任务是将程序从错误状态中恢复,以使程序能要么换一种方式运行,要么继续运行下去。

import java.util.*;public class WhoCalled{static void f(){try{throw new Exception();}catch(Exception e){for(StackTraceElement s:e.getStackTrace())System.out.println(s.getMethodName());}}static void g(){f();}static void h(){g();}public static void main(String[] args){f();System.out.println("--------------------------------------");g();System.out.println("--------------------------------------");h();}}

finally子句:

无论异常是否抛出,finally子句总能被执行。

import java.util.*;class ThreeException extends Exception{}public class FinallyWorks{static int count=0;public static void main(String[] args){while(true){try{if(count++==0)throw new ThreeException();System.out.println("No exception");}catch(ThreeException e){System.out.println("ThreeException");}finally{System.out.println("In finally clause");if(count==2)break;}}}}


1 0
原创粉丝点击