分享

Java学习——43、异常处理措施

 pythonjava学习 2021-04-06

很多异常,比如除数为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());

    }

}

其运行结果如下:

月份错误!

2018158

日期错误!

20181250

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多