Java异常处理---throw和throws

Concept

发现错误的理想时期是在试图运行程序之前。然而,编译期间并不能找出所有的错误,余下的问题必须在运行期间解决。这就需要错误源通过某种方式,把适当信息传递给某个接受者——该接受者知道如何正确处理这个问题。

throw

throw是语句抛出一个异常
语法:throws(异常对象)

throw e;
throws

throws是方法可能抛出异常的声明。(用于方法时,告诉调用方法的调用者,方法可能要抛出异常了 )
语法:[(修饰符)] (返回值类型) (方法名) ([参数列表]) [throws(异常类)]{…}

public void test() throws Exception1,Exception2,Exception3{...}
Example:
public class test {
    public void func(int a) throws NumberFormatException, NullPointerException {
        try {
            if (a == 1) {
                throw new IllegalAccessException();
            } else if (a == 2) {
                throw new NumberFormatException("continue to throw");
            } else {
                throw new NullPointerException("user-defined Exception");
            }
        } catch (IllegalAccessException e) {
            System.out.println("会发生IllegalAccessException!!");
            //catch到自己解决 就不用向外抛出 函数声明后面也不用写
        } catch(NumberFormatException e) {
            throw e;
            //catch后继续抛出
        }
    }

函数声明后只需要写NumberFormatException NullPointerException,抛出后交给上层调用者解决,IllegalAccessException catch捕捉到自己解决 就不用写在函数后面

调用两次函数 参数先输入1后输入2

运行结果

会发生IllegalAccessException!!
Exception in thread "main" java.lang.NumberFormatException: continue to throw
	at com.xxx.test.func(test.java:11)
	at com.xxx.test.main(test.java:25)

遇到illegalAccessException后自己解决,继续执行。遇到NumberFormationException抛出异常

Difference
  1. throw在方法体内 throws在方法声明后面 由方法调用者来处理
  2. throw抛出一个异常实例 throws声明异常类型
  3. throws执行后一定会抛出具体异常 throws表示方法可能抛出

两者都不会由函数去处理异常,处理异常是有函数的上层调用

针对可能出现异常的方法针对性写一个throw是一个良好的编程习惯

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值