java为什么要有签名,java – 为什么抛出方法签名的一部分

抛出部分并不表示该方法需要抛出所提到的异常,即使在特定的位置也是如此.它只告诉该函数允许这样做.

因此包含throws UnsupportedOperationException并不意味着该方法不受支持.除了UnsupportedOperationException之外还有一个RuntimeException,所以无论如何方法都可以抛出它.

现在因为在方法的签名中需要它,它归结为完全检查异常的能力.为了使编译器能够确定方法是否只能抛出指定的异常,它必须能够确定它调用的方法不能抛出未捕获的异常.

这意味着,例如,覆盖方法意味着您无法添加可能引发的异常,否则您将无法验证调用该方法的方法是否不会抛出除指定之外的任何内容.另一种方式是可能的(但我不确定Java是否支持),覆盖一个可能抛出一个可能不抛出的方法.

例如:

class B {

int fubar(int) throws ExceptionA {

}

int frob(int) throws ExceptionA {

return fubar(int);

}

}

class D extends B {

int fubar(int) throws ExceptionB {

}

}

现在指定frob可能只抛出ExceptionA,但是在调用this.fubar时它会打开抛出其他内容的可能性,但是fubar被定义为可能只抛出ExceptionA.这就是为什么D.fubar是一个无效的覆盖,因为这会打开this.fubar实际抛出ExceptionB的可能性,编译器将无法保证frob不会抛出ExceptionB.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值