Java学习——43、异常处理措施
很多异常,比如除数为0这些,都可以在写程序时对其进行处理。
处理的方式大多用if语句,将有可能产生的异常排除。
但在设计程序的时候,有时候想得并不那么完备,可能会出现一些意想不到的异常,Java提供了异常处理机制来捕获和处理异常。
1、异常处理语句
Java提供try-catch-finnaly语句来捕获和处理一个或多个异常,其语法格式如下:
try{
可能存在异常的语句;
}
catch(异常类异常对象){
对异常对象进行处理的语句;
}
【
catch(异常类异常对象){
对异常对象进行处理的语句;
【可以有多个catch子句】
}
】
【finally{
无论是否产生异常,均要执行的语句;此finally可省。
}】
例:
本例仅为异常处理例题,无实际意义。
public class Sample{
public static void main(String args[]) {
try {
int a[]= {1,2,3,4};
for(int i=0;i<5;i++)
System.out.println(a[i]);
int b=a[0]/0;
}
catch(ArrayIndexOutOfBoundsException e) {//下标越界异常
System.out.println("下标越界");
}
catch(ArithmeticException e) {//除数为0时,输出,因前已经有异常了,本catch并没有被执行,直接跳到finnaly子句了
System.out.println("除数为0");
}
catch(Exception e) {//捕获所有异常,由于本例中,只有两个异常,一个是下标越界,一个是除数为0,均已在以上代码中补捕获并处理,所以本catch子句不会被执行
System.out.println("有异常");
}
finally {
System.out.println("Welcome,张熹熹");
}
}
}
其运行结果如下:
1
2
3
4
下标越界
Welcome,张熹熹
注:一个异常对象只能被一个catch子句捕获,之后Java就不再进行匹配操作,并自动清除ex。
如果所有catch子句都没有捕获ex,则由Java虚拟机捕获并处理,会导致程序运行终止,就像没有用到try语句一样。
通常最后一个catch子句的异常类为Exception,能够捕获所有未被处理的异常,不会导致程序运行终止。
2、抛出异常
如果对象或者方法没有处理异常的能力,可以将异常抛出。
抛出异常对象的throw语句
一个异常对象可由Java虚拟机抛出,也可由程序主动抛出。
用程序抛出异常对象的语法格式如下:
throw 异常对象
例:
public class Date extends Exception{
private int year,month,day;
public Date(int year,int month,int day) {
this.year=year;
try {
if(month<1||month>12)
throw new Exception("A");//抛出异常
if(day<1||day>31)
throw new Exception("B");//抛出异常
}
catch(Exception e){
//System.out.println(e.toString());
if(e.toString().equals("java.lang.Exception: A"))//处理异常 System.out.println("月份错误!");
if(e.toString().equals("java.lang.Exception: B"))//处理异常
System.out.println("日期错误!");
}
finally
{
this.month=month;
this.day=day;
}
}
public String toString(){
returnyear+"年"+month+"月"+day+"日";
}
public static void main(String args[]) {
Date d=new Date(2018,15,8);
System.out.println(d.toString());
Date d1=new Date(2018,12,50);
System.out.println(d1.toString());
}
}
其运行结果如下:
月份错误!
2018年15月8日
日期错误!
2018年12月50日