Java异常之throws和throw理解

本文深入解析Java中的异常处理机制,详细介绍了throws和throw关键字的使用场景及规则,包括如何抛出异常、处理检查异常和非检查异常,以及如何在方法签名中声明可能抛出的异常类型。

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

1、Throws

      如果在当前方法不知道该如何处理该异常时,则可以使用throws对异常进行抛出给调用者处理或者交给JVM。调用者调用此方法,要么抛出要么try catch处理,到了JVM这里,就是打印出异常堆栈,并终止运行。换句话说,用这个有两种情况。

       1>我 throws抛出异常,如果是检查异常,那么调用者必须捕获或再次抛出

       2>我 throws抛出异常,如果是非检查异常或者没有直接调用的地方,都是可以交给jvm来处理

      throws在使用时应处于方法签名之后使用,可以抛出多种异常并用英文字符逗号’,’隔开。

public void throwsTest() throws ExceptionClass1, ExceptionClass2 {...}

2、throw

      如果需要程序在程序中自行抛出异常,应该使用throw语句抛出,抛出的不是一个类而是一个对象且只能抛出一个对象。它可以单独使用,也可以结合catch块捕获使用。如果抛出的异常对象时Checked异常则处于try块里被catch捕获或者放在一个带throws的方法里;如果抛出的是RuntimeException则既可以显示使用try…catch捕获也可以不理会它
 

public static void main(String[] args) {
        throwRuntime(2);
        try{
            throwChecked(3);
        }catch(Exception e) {
            System.out.println(e.getMessage());
        }
        //throw的异常可以直接交给jvm
        throwRuntime(-3);
        throwFileNotFound(5);
    }
    //该方法内抛出一个Exception异常对象,必须捕获或抛给调用者
    public static void throwChecked(int a) throws Exception {
        if(a < 0) {
            throw new Exception("a的值应大于0,不符合要求");
        }
    }
    //该方法内抛出一个RuntimeException对象,可以不理会直接交给JVM处理,非checked异常可以不用try catch抛出
    public static void throwRuntime(int a) {
        if(a < 0) {
                throw new RuntimeException("a的值应大于0,不符合要求");
        }
    }
    //该方法内抛出一个FileNotFoundException对象,checked异常需要在try catch语句块中抛出,可以不理会直接交给JVM处理
    public static void throwFileNotFound(int a) {
        if(a < 0) {
            try {
                throw new FileNotFoundException("a的值应大于0,不符合要求");
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        }
    }

更多可参考:https://blog.youkuaiyun.com/sdr_zd/article/details/75675004

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值