rss· 投稿· 设为首页· 加入收藏· 繁體版
当前位置: 火魔网 » 程序开发 » Java基础

java异常处理机制

error和exception类用于处理java中的错误
他们继承自throwable类 throwable类又继承自object类;这些类或者

继承自他们的类的实例,都可以被jvm(不懂?链接:

http://baike.baidu.com/view/160708.htm)识别为异常。
注意:error类异常为内部错误,正常情况下不期望用户的程序捕获他

们,java中管理处理的关键字:try,catch,throw,throws,finally.必

须监控异常的程序语句包含在try块中,通过catch,可以捕获异常并用

合理方式来处理,也可以直接用throw直接抛出异常,throws子句用于

在方法声明中抛出异常,在finally块中,可以指定在程序结束之前必

须执行的代码,也就是无论是否发生异常,finally快中的代码都将被

会执行。 try块和catch块 将要被监控的代码(可能产生异常的代码)防止在try块中,catch字句

应直接位于try后,catch字句可以包含语句,处理异常及打印生成异常

的原因,每个catch的作用域仅限与try块!一个try块可以有多条catch

语句!.一旦异常处理完毕,程序可以继续执行!不发生错误catch将永

不会执行//够详细? try{
          int num = calculate(9,0);     //用户自定义方法
          System.out.pritln(num); catch (Exception exception)       System.err.println("发生异常:"+exception.toString());

            exception.prrintStackTrace();

}
..........

int calculate (int a , int b)     int   num = a/b;
                return num; exception是Exception类的实力,注意在catch块中,方法toString()

和printStackTrace()用于输出发生的异常。
异常类的方法: printStackTrace()是在Exception类中定义的方式,用于显示有关异常

的信息,他包含的信息不仅涉及异常的原因,还涉及产生该异常的代码


getMessage()是在RuntimeException类中定义的方法,用于获得与异常

相关的详细信息
getStackTrace()方法提供通过程序对printStackTrace()输出的堆栈跟

踪信息的访问。他返回一个堆栈元素的数组,每个元素表示一个堆栈帧


如果原因不存在或者未知,getCause()方法将返回错误或null的原因。 实例:
class ExceptionRaised{
        protected ExceptionRaised(){         static int calculate (int operand1,int aperand2){            //return 返回余数
         int result =operand1 / operand2;
             return   result;           } public class ArithmeticException{
            protected ArithmeticException(){    }             //     构造方法                         @parem   args 字符串参数的数组 public static void main (string[] args){
       ExceptionRaise obj = new ExceptionRaised(); try{
           int result =obj.calculate(9,0);
          system.out.pringtln(result);

}
catch (Exception   e){
            System.err.printl("发生异常:" + e.toString());
            e.printStackTrace();       ////////////////////////////////////////////////////////////// 代码解释:
声明一个Exception 类型的实例e,确保使用对象e可以捕获到任何类型

的异常,因此,当引发的异常类型在设计时未知时,可使用一般类

Exception来捕获错误
catch()快可以捕获在calculate()方法执行过程中发生的任务错误,因

此输出语句将永远得不到执行,因为当被除数为0时,发生异常,就会

直接执行catch块中的代码。
有点累,先去吃晚饭(孤独的游鱼 2008-11-16 19:46) 酒足饭饱了,继续:
finally块 finally块可以确保发生异常时执行任何操作,包括所有的清理工作,

无论是否发生异常,此模块都将自行,如果引发异常,及时没有catch

块与引发的异常匹配,也将执行,finally子句是可选的,但每个try语

句至少应该有一个catch或finally字句 实例: try      methodGeneratingException();         }
catch(Exception e)      ..........}
finally{
      cleanup();    ................ 如果methodGeneratingException();方法异常,将调用cleanup()方法

,即使异常未知,finally块中的cleanup()方法也会执行,finally块

应放置在最后一个catch块后。 多重catch块 如果一段代码科恩能够会导致多个错误,可以就是可以产生多个异常,

可以使用catch子句,分别捕获每个错误,按照出现的顺序来查看每个

catch语句,并执行第一个与异常匹配的语句,执行其中一条catch语句

之后,其他的catch语句将被忽略,然后控制流程转到try/catch块后面

的语句
-------------------------------------------------------------

////////////////////////////////////////////////////////////// .....
try{
            doFileProcessing();   //用户自定义方法
            displayResults();         //用户自定义方法 }     catch   (ArithmeticException e){
         handleArithmeticException (e); //用户自定义处理程序
         catch (Exception e){
         System.err.println("错误:"+ e.printStackTrace());   }
............//////////////////////////////////////////////////

/////////// 代码解释:
第一个catch块捕获ArithmeticException,如果发生异常,则由这个块

单独处理,然而如果不是ArithmeticException类型,控制权则转到其

他异常的第二个catch块
ArithmeticException将由第一个catch捕获和处理,而任何其他类型的

异常将由第二个catch块处理
ArithmeticException是RuntimeException类的子类,而

RuntimeException又是Exception的子类,ArithmeticException将在

catch块中的Exception之前处理,原因是:如果先处理Exception的实

力,控制权将永远不会转到第二个catch块,也就是说,使用多重catch

语句时一定要记住:异常子类应该位于任何父类之前,这是因为使用父

类的catch语句将捕获该类型的异常以及它的任何子类的异常,因此,

如果子类位于它的父类之后,控制权就永远不会传给它,在java中,不

能到达的代码是一个错误。 ----------------------
catch (Exception e){
        System.out.println("父类异常 catch语句");
         catch (ArithmeticException ae){//错误-不能到达代码
          System.out.printn("这个子类的父类是:"+"exeception类

且不能到达"); } catch语句就像只有一个参数且没有返回类型的方法定义,参数可以是

类,也可以是接口,发生异常时,将搜索嵌套try/catch语句时候有与

异常类匹配的参数,如果参数符合下列条件,可以认为它与异常匹配: --是异常的父类 关于常用异常类的父子关系在图中表示: 见图:
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

关于嵌套try-catch块我就不写了 //我心中的lover上线了 跟她聊天了。。。
         关于后面throw和throws明天再搞! 总结:
JAVA必须显式处理会抛出异常的方法调用,要么try ... catch,要么

throws。
也就是要么你在方法里面处理,要么往上抛。 你不得不选择一种。为

什么要try?它就是一种文法,通常情况下try里面的方法调用会有可能

抛出可预料的应用级异常,这让人很无奈,只要有方法throws 某个异

常,你必须去截获或者往上抛(C#就简单些,默认往上抛),否则编译出

错。
当然,方法很有可能会抛出难以预料的系统级异常,但是那通常并不需

要我们去截获处理,当然你也可以去截获并且处理,如果你能预料得到


换种说法: try里面就是你预料将要发生的应用级异常的方法,并且

知道需要catch到某个异常后作出什么处理,否则就往上扔。可能有些

方法调用你不知道会可能抛出什么异常,写那些方法的人会告诉你的,

也就是方法的throws申明(如果你不try,那么编译器会提示你去try,

否则编译通不过)

java异常处理机制

java异常处理机制

java异常处理机制
顶一下
(1)
踩一下
(0)