很多异常,比如除数为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、抛出异常 如果对象或者方法没有处理异常的能力,可以将异常抛出。
一个异常对象可由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日 |
|
来自: pythonjava学习 > 《待分类》