异常基础篇_对throws和throw的理解,自定义异常

来源:互联网 发布:健身行业数据 编辑:程序博客网 时间:2024/06/06 13:58

throws
图片一

在因为调用div方法的main()方法没有catch语句,所以报错

class Demo{    int div(int a,int b)//throws Exception//关键字标记该代码快可能会出现问题,编译时会检测是否有catch语句,没有会提示    {        return a/b;    }//throws为关键字,此方法会向外抛出吧处理异常的任务交给上一级(让调用此方法的方法来解决异常)}class YichangDemo {    public static void main(String[] args)     {        new Demo().div(4,1);        System.out.println("Hello World!");    }}

如把throws Exception注释掉,没有此标记,编译时就提示catch(没有声明说此代码可能会出现问题)
这里写图片描述


class Demo{    int div(int a,int b)//throws Exception//关键字标记该代码快可能会出现问题,编译时会检测是否有catch语句,没有会提示    {        return a/b;    }//throws为关键字,此方法会向外抛出吧处理异常的任务交给上一级(让调用此方法的方法来解决异常)}class YichangDemo {    public static void main(String[] args) throws Exception     {        int c=new Demo().div(4,1);        System.out.println(c);    }}

在两个方法中都用throws抛出,异常会交给main方法上一级(虚拟机)处理
我们可以调用throw标记的div方法,然后在其上一级中书写catch语句,捕获异常如:

class Demo{    int div(int a,int b)//throws Exception//关键字标记该代码快可能会出现问题,编译时会检测是否有catch语句,没有会提示    {        return a/b;    }//throws为关键字,此方法会向外抛出吧处理异常的任务交给上一级(让调用此方法的方法来解决异常)}class YichangDemo {    public static void main(String[] args)     {        try{            int c=new Demo().div(4,0);            System.out.println(c);        }        catch (Exception e){            System.out.println(e);        }        System.out.println("over");    }}

——————————————————————————————
运行结果:这里写图片描述

多异常:

try{...}catch(ArithmeticException e){...}catch(ArrayIndexOutOfBoundException){}{...}

注意:
1.一个try语句可能会报出多种不同的异常,所以在声明异常时,尽量声明更为具体一些。这样处理的也更具体
2.声明几个异常,理论上应该有几个相应的catch语句对异常进行处理,
3.如果出现多个catch语句,并且有继承关系,如Exception,ArithmeticException,父类语句放在最后面。(如果放在其他catch语句前,编译时会报异常)
4.在进行catch处理时,要定义具体的处理方式,不要简单的只有一条输出语句报出异常信息。

自定义异常:
自定义一个异常类:
需要手动抛出

class FuShuException extends Exception{}

代码示例

class FuShuException extends Exception{    FuShuException(String msg){//构造函数,定义此异常新信息,        //也可以自定义构造函数,个人那句自己开发的需要,决定传入的参数,异常信息    super(msg);//父类有获取异常信息的方法,不用再写    }}public class Demo {    public int div(int a,int b)throws FuShuException,ArithmeticException{//在div里面的语句中用了throw,        //所以在此声明throws,抛出异常,交给上一级处理        if(b<0)            throw new FuShuException("出现了除以负数的情况");//手动通过throw关键字抛出自定义异常传入了异常信息        return a/b;    }     public static void main(String[] args){        Demo a=new Demo();        try{            int x=a.div(5,-1);             System.out.println("程序正常:"+x);        }        catch(FuShuException e){            System.out.println("异常处理,进入自定义异常");            System.out.println(e);        }        catch(ArithmeticException e){            System.out.println("异常处理,除0");            System.out.println(e);        }        System.out.println("over");    } }

注意:自定义的异常必须是自定义的一个类继承了Exception(或者Throwable(不建议))
在需要抛出自定义异常的方法中,用throws语句标记此方法,代表抛出,在具体的可能会有异常的语句中,用throw抛出自定义异常。
用了throws和throw后必须要在上一级方法中用catch语句捕获,进行处理异常。

throws:是用在函数上,后面跟异常类,可以多个,用,隔开
throw:使用在函数内,后跟异常对象,如自定义的异常对象,在抛出对象时使用

阅读全文
0 0
原创粉丝点击