首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

错误的捕获与处理

2012-12-18 
异常的捕获与处理在我们编写java程序时,我们经常遇到的问题就是:程序老出现问题。这里出现的问题可分为两种

异常的捕获与处理

在我们编写java程序时,我们经常遇到的问题就是:程序老出现问题。这里出现的问题可分为两种:一、程序出现错误(Error);二、程序出现异常(Exception)。程序出现错误,那就是用户的问题,即出现了语法错误,只能自己不断的调试更正。而当一个程序在编译时没有问题,但在运行时可能出现各种各样的错误导致程序退出,这就是异常。本节主要对异常来做个小小的分析。

异常是导致程序中断运行的一种指令流。如果不对异常进行正确的处理,则可能导致程序的中断执行,造成不必要的损失,所以要在程序的设计中必要的考虑各种各样异常的发生,并正确的做好相应的处理,以确保程序的正常执行。我们分以下几步来说明问题。

一、在程序中使用异常处理

在写程序的时候,如果出现异常,我们必须做相关的处理,在Java中异常处理语句的格式为:

try{

//有可能出现的异常语句

}catch(异常类?异常对象){

//编写异常的处理语句

}[catch(异常类?异常对象){

//编写异常的处理语句

}……]

[finally{

//一定会运行到的程序代码

}]

例如:如下一个简单的程序(除数为0出现的异常)

public?class?Test?{

public?static?void?main(String[]?args)?{

int?i=10;

int?j=0;//我们知道当除数为0的时候会出现ArithmeticException异常

try{

int?temp=i/j;

System.out.println("两个数字相除的结果为:"+temp);

System.out.println("*****************");

}catch(ArithmeticException?e){

System.out.println("出现了异常"+e);

}

}

}

这个时候因为对异常进行了处理,程序就能正确的运行。程序一般会出现多种异常,如果不想进行处理,我们可以在catch语句中写如下代码,调用Exception中的方法,打印异常:

catch(ArithmeticException?e){

e.printStackTrace();

}

二、throws和throw关键字

在定义方法时可以使用throws关键字声明,使用throws声明的方法表示此方法不处理异常,交给方法的调用处进行处理,其使用格式如下:

public?返回值类型?方法名(参数列表……)throws?异常类(){}

为了说明问题,我们看以下代码:

class?Math{

public?int?div(int?i,int?j)throws?Exception{

int?temp=i/j;

return?temp;

}

}

public?class?Test?{

public?static?void?main(String[]?args)?{

Math?m=new?Math();

try{

System.out.println("两个数字相除的结果为:"+m.div(10,?2));

}catch(Exception?e){

e.printStackTrace();

}

}

}

在主函数中,不管是否有问题,当调用了div方法时,都要进行异常处理,用try……catch块进行异常的捕获和处理。其实throws是在方法div处定义的,那么我们也可以在主函数中使用throws关键字来处理异常,这样主函数就向上抛出异常,将异常抛给Java虚拟机进行处理。这就好比一个学校,学生有什么事情处理不了,向上报给老师,老师处理不了上报给校长,到校长了也就到头了,那么Java的“头”就是JVM。

与throws不同的是,也可以直接使用throw抛出一个异常,抛出时直接诶抛出异常类的一个实例化对象即可。

public?class?Test?{

public?static?void?main(String[]?args)?{

try{

throw?new?Exception("自己抛出的异常!!");

}catch(Exception?e){

e.printStackTrace();

}

}

}

上述并不难理解,就是手工抛出异常类得实例化对象。

虽然Java中已经提供了大量的异常类,但是有时这些异常类也很难满足开发者的需求,所以用户可以根据自己的需要定义自己的异常类。只要注意在定义异常类时要继承Exception类。

<!--EndFragment-->

热点排行