异常的捕获与处理
在我们编写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-->