黑马程序员__异常

来源:互联网 发布:淘宝旺季是什么时候 编辑:程序博客网 时间:2024/06/11 23:00

             ------- android培训java培训、期待与您交流! ----------

   现实世界中,往往会发生一些不同以往的情况,比如说一向准时上课的小明

某天突然迟到了,一向身体健康的大明某天突然生病了,等等这些突然发生的

不同寻常的状况我们就把他称作异常情况,简称异常。同样,在java程序当中

往往也很容易会出现一些异常,现实中出现异常人们会采取一些处理措施,比

如老师会询问小明迟到的原因以及根据原因对小明做出不同的处罚,将生病的

大明送往医院让医生检查病情并及时医治。java中对可能发生的异常也有自己

的处理机制。本篇博文将详细阐述java中的异常处理机制。

 

1.try...catch语句:捕获异常。

  java中一般用try...catch语句来捕获可能出现异常的代码块。它的一般格式如下

try{可能会发生异常的代码块}catch(Exception e){处理异常现象的方法}


由于异常会强制的中断正常流程,比如说如果try中的代码发生异常,程序会跳转

catch代码块中执行,而程序中余下的代码将不会得到执行。但是,有时候程序中

会有一些不得不执行的代码,如果得不到执行,就会影响程序的健壮性。这时,

java中通常与try...catch能够连用的finally代码块。(注意是finally而不是此前所提到

过的final,final是用来修饰类,方法以及成员变量的)finally代码块不管try中的代码

 是否会发生异常,都会执行到。

<span style="font-size:12px;">class A{int a,b,t;public static void main(String[] args) {try{t=a+b;}catch(Exception e){}finally{system.out.println(t)}}//将打印t的值</span>


2.throws子句:声明可能会出现的异常。

  如果一个方法可能会出现异常,但没有能力处理这种异常,可以在方法声明处用

throws子句来声明抛出异常。

 

 

class A{int method(a,b)throws Exception{if(b==0)throw new Exception("除数不能为0")return a/b;}public static void main(String[] args) {int a=8,b=0,t;try{t=new A().method(a,b);}catch(Exception e){e.toString}finally{system.out.println(t)}}}<pre class="java" name="code"> 

上述代码中用throws语句来声明方法将要抛出异常,在该方法内部的throw语句用于将异常对象

创建,而该方法抛出的异常对象就是该对象。(注意java是一门面向对象的语言,java将异常也

看做是一个对象来处理)。对于thow语句所抛出的对象,则必须是java.lang.Throwable类或者其

子类的实例,一下代码将编译失败:

throw new String("不好了,失火了");//编译失败,String类型不是异常类


3.对于处理语句,要正确使用它们,,就必须遵守必要的语法规则。

(1)try代码块不能脱离catch代码块或者是finally代码块而单独存在。其后至少有一个catch块

或者是finally块,否则编译失败。

class A{public static void main(String[] args){int a,b;try{system.out.println(a/b);}//编译失败}}


(2)如果try后面既有catch代码块又有finally代码块,那么必须要把finally代码块放在catch代码块

之后。

<span style="font-size:12px;">class A{int method(a,b)throws Exception{if(b==0)throw new Exception("除数不能为0")return a/b;}public static void main(String[] args) {int a=8,b=0,t;try{t=new A().method(a,b);}finally{system.out.println(t)}catch(Exception e){e.toString}//编译失败}}</span>


(3)try后面可以只有finally代码块。

<span style="font-size:12px;">class A{int method(a,b)throws Exception{if(b==0)throw new Exception("除数不能为0")return a/b;}public static void main(String[] args) {int a=8,b=0,t;try{t=new A().method(a,b);}finally{system.out.println("hello world")}//编译通过}}</span>


(4)只在try中定义的变量其作用域为try代码块,catch代码块以及finally代码块都将不能访问到。

<span style="font-size:12px;">class A{int method(a,b)throws Exception{if(b==0)throw new Exception("除数不能为0")return a/b;}public static void main(String[] args) {int a=8,b=0,t;try{int x=0;t=new A().method(a,b);}catch(Exception e){x++;//编译出错,不能访问到x变量。e.toString}finally{x++;//编译出错,不能访问到x变量。system.out.println(x)}}}</span>

 

5)一个方法的异常通常有两种处理方式,要么用try...catch捕获并自行处理,要么通过throws声明

抛出该异常给方法的上一层调用者处理。

(6)java中的Throwable类中提供了两个很常用的方法:

getMessage()--返回String类型的异常信息。

printlnStackTrace()--打印跟踪方法调用栈而获得的详细异常信息。

 

 

 

 

0 0
原创粉丝点击