throws(throwjava)

Java中经常混淆的两个关键词throw和throws有什么区别?如何在不出错的情况下记住它们?throw和throws扔啊扔差异抛出:它出现在方法的签名中,声

Java中经常混淆的两个关键词throw和throws有什么区别?如何在不出错的情况下记住它们?

throws(throwjava)插图

throw和throws扔啊扔

差异抛出:它出现在方法的签名中,声明当前方法可能抛出的所有异常。语法格式如下:

抛出异常1,异常2,...throw:可以出现在任何代码块中。这是一个抛出异常的操作。语法格式如下:

抛出新的异常();我们可以发现,当throws声明一个可能抛出的异常时,后面是一个异常类,这个异常类后面可以有多个异常类,每个异常类之间用逗号隔开;抛出异常时,后面跟一个异常的实例(对象),只能抛出一个实例。这是因为抛出一个异常后,后面的所有异常一定是不可达的,所以抛出多个异常是没有意义的。

throws(throwjava)插图(1)

简单的例子的简单例子

为什么有两次投掷?这和java的异常机制有关。对于检查异常,有两个选项:1)catch);引发该异常的位置;2)如果本地处理不了,可以选择抛起来。那么,在方法签名后面抛出Exception就意味着方法体中的异常暂时无法处理,需要在方法之外抛出,让其他方法捕捉并处理。

如上面的简单示例所示,如果main方法也不知道如何处理这种类型的异常,它也可以使用throws声明来抛出异常,这将由JVM来处理。

处理JVM异常的方法是打印异常的跟踪堆栈信息,并停止程序运行。

利用IDE(IntelliJ IDEA)的提示功能,我们可以清楚地看到这一点。

throws(throwjava)插图(2)

方法中没有throw异常的情况方法中没有抛出异常。

1)如果方法中没有抛出异常,或者异常已经在方法体中被捕获,那么throws语句抛出异常。对于使用此方法的外部方法,仍然需要捕获异常。这是有意义的。虽然抛出异常实际上是不可能的,但是对于不能轻易改变的类库或者接口来说,可以提前抛出的异常实际上是可以在未来添加的,不会影响现有的客户代码。(你可以想想如果类库开发者随意添加抛出会对我们用户造成什么影响。)

throws(throwjava)插图(3)

方法中throw的异常没有在原地捕获throw in方法的异常未被捕获到位。

2)如果方法中的throw异常没有被catch到位,将是一个语法错误,未处理的异常和未处理的异常。编译器禁止代码编译。这非常聪明,因为如果此时不声明throws抛出的异常,那么从语法上来说,外部方法可以不捕捉异常,只是一次抛出一级,直到程序停止。

RumtimeException就是这样一个异常,它不同于Checked异常。这种类型的异常表示运行时异常,被认为是不可恢复的。它不需要抛出,所以程序会直接停止,程序员可以及时修改bug。

如何记忆呢?

现在一般IDE的联想功能都不会错,但是面试的时候遇到这个问题就不知所措了。综上所述,声明中所有的“动词”关键字都是单数抛出,比如extends,implements。

如果我的文章对你有帮助,请关注我,喜欢我。谢谢~

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。

作者:美站资讯,如若转载,请注明出处:https://www.meizw.com/n/166224.html

发表回复

登录后才能评论