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

本文介绍了Java中的异常处理机制,包括如何使用throws关键字声明可能抛出的异常,如何使用throw关键字抛出异常,以及如何在调用方法中捕获并处理这些异常。还详细解释了自定义异常的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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:使用在函数内,后跟异常对象,如自定义的异常对象,在抛出对象时使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值