您的位置:首页 > 职场人生

黑马程序员__异常

2015-04-30 15:44 232 查看
             ------- 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()--打印跟踪方法调用栈而获得的详细异常信息。

 

 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: