首页 » PHP教程 » phpcatch多个异常技巧_全栈2019Java异常第十二章catch与异常匹配详解

phpcatch多个异常技巧_全栈2019Java异常第十二章catch与异常匹配详解

访客 2024-12-18 0

扫一扫用手机浏览

文章目录 [+]

这里给一张它们两人的合照吧:

2.非常匹配

本日我们紧张任务便是教大家认识非常匹配。

phpcatch多个异常技巧_全栈2019Java异常第十二章catch与异常匹配详解

什么叫“非常匹配”?

phpcatch多个异常技巧_全栈2019Java异常第十二章catch与异常匹配详解
(图片来自网络侵删)

当非常被抛出时,非常处理系统会按照catch的书写顺序找出参数与非常类型相匹配的第一个处理程序(catch),然后进入catch子句实行,此时非常得到了处理,之后不再连续查找。

定义有点长这里给大家分词阐明+举例解释。

第一句:“当非常被抛出时”

从句子中可以看出须要抛出一个非常。

第二句:“非常处理系统会按照catch的书写顺序找出参数与非常类型相匹配的第一个处理程序(catch)”

此句子里面提到“找出参数与非常类型相匹配的第一个处理程序”,像此例中catch参数类型是IOException,try里面抛出的非常类型也是IOException,一看就相匹配。

这样就成功地完成了一次匹配。

那么不匹配的情形是什么样的呢?

便是抛出的非常类型和catch参数类型不一致。
例如IOException和ClassNotFoundException就不匹配:

上面演示了一些单个catch的情形,如果多个catch的情形呢?从“非常处理系统会按照catch的书写顺序找出参数与非常类型相匹配的第一个处理程序(catch)”这句话我们也能感想熏染到有多个catch进行非常匹配的情形。
下面举例解释。

上述程序抛出了两个非常IOException和ClassNotFoundException,我们对其分别进行catch操作。
当发生非常时,非常处理系统就会按照catch的书写顺序(从上至下)开始查找相匹配的catch进行实行。

例如,当发生IOException时,实行第一个catch:

当发生ClassNotFoundException时,实行第二个catch:

第二句阐明完了,接着来看后面三句:“然后进入catch子句实行,此时非常得到了处理,之后不再连续查找。

后面三句是说当我们非常被catch到往后,此非常就算是被处理了,当非常被处理完之后,非常处理系统就结束查找过程。

这个也很好理解,比如,我们程序发生IOException,匹配到第一个catch:

此时后面还有一个catch,它的参数类型是ClassNotFoundException,这个catch就不再连续匹配了,无论后面还有多少个catch都不再进行匹配了。

至此,非常匹配阐明完了,下面看看怎么利用一个catch捕获所有非常。

3.利用一个catch捕获所有非常

怎么才能利用一个catch捕获所有非常呢?

利用所有非常的父类即可。

所有非常的父类是?

是Exception。

下面通过一个例子来演示一下如何利用catch捕获所有非常。

演示:

请利用一个catch捕获所有非常。

请不雅观察程序代码。

代码:

Main类:

结果:

从运行结果来看,程序写得没有问题,我们的确通过一个catch捕获了所有非常。

重点:

为什么一个catch可以捕获所有非常?

由于非常匹配时,不须要非常类型和catch参数类型完备同等,是catch参数类型的子类也可以匹配到。

简而言之便是,由于IOException和ClassNotFoundException正是Exception的子类,以是一个参数类型为Exception的catch子句就够了。

4.利用一个catch捕获多个非常

接下来是教大家如何利用一个catch捕获多个非常。

多个非常?

嗯,便是同时在一个catch里面捕获两个及以上的非常。

那就演示一下吧。

演示:

请利用一个catch捕获多个非常。

请不雅观察程序代码。

代码:

Main类:

结果:

从运行结果来看,程序没有问题。

来看见地式代码是怎么写的,首先我们在try代码块里面抛出两个非常IOException和ClassNotFoundException:

由于if条件表达式的缘故,它们两个非常中间一定会抛出一个非常。
而抛出它们两个中的任意一个,都会被我们catch捕获到。

为什么抛出它们两个非常中的任意一个都会被捕获到呢?

由于单个catch块可以处理多种类型的非常。
此功能可以减少代码重复并减少捕获过于宽泛的非常。

在catch子句中,指定块可以处理的非常类型,并利用竖线(|)分隔每个非常类型。

这个竖线(|)便是或的意思。

上述例子中,catch中的参数类型表示我既能捕获IOException,也能捕获ClassNotFoundException。
当try代码块里面发生这两个非常中的任意一个,我都能捕获到。

5.多个catch分别捕获非常

这一小节是最随意马虎的,由于之前章节中多次涌现这种情形。
下面我们就来看看,多个catch分别捕获非常的情形。

演示:

请利用多个catch分别捕获非常。

请不雅观察程序代码。

代码:

Main类:

结果:

从运行结果来看,程序写得没有问题,结果也符合预期。

看一下程序代码:

这里的话,我们抛出了两个非常IOException和ClassNotFoundException,然后呢,我们又利用两个catch分别去捕获IOException和ClassNotFoundException。

实际运行的时候,实行的是抛出IOException:

故实行结果便是:

程序就这么大略,实在分别来捕获非常这种写法在日常开拓中很常见,大家也会逐渐熟习起来。

接下来,又到了重点时候,请大家把稳。

6.多个catch时,父类非常放在末了【重点】

本日的重中之重:

多个catch时,父类非常放在末了。

就两句话,第一句:多个catch时

前置条件是多个catch,一个catch此定义不存在的,一定假如多catch。

例如:

第二句:父类非常放在末了

像上图代码这样的弗成,为什么呢?

Exception是IOException和ClassNotFoundException的父类,怎么能放在它们的前面。

为什么不能放在它们前面?

由于父类非常会将后面的子类非常覆盖掉,普通来讲便是每次非常匹配的都是父类前辈行匹配,如果是子类非常的话,父类非常仍旧匹配成功,这样就没有后面子类非常什么事,以是子类非常写在父类非常没故意义。

结合例子来看,我们运行程序,看看实行结果:

缺点信息:

笔墨版:

/Users/admin/Workspace/Java/Hello/src/main/Main.java

Error:(21, 10) java: 已捕获到非常缺点java.io.IOException

Error:(23, 11) java: 已捕获到非常缺点java.lang.ClassNotFoundException

这里编译就直接不通过。
以是希望大家千万要记住,不要将父类非常放在子类非常的前面。

总结当非常被抛出时,非常处理系统会按照catch的书写顺序找出参数与非常类型相匹配的第一个处理程序(catch),然后进入catch子句实行,此时非常得到了处理,之后不再连续查找。
非常匹配时,不须要非常类型和catch参数类型完备同等,是catch参数类型的子类也可以匹配到。
单个catch块可以处理多种类型的非常。
此功能可以减少代码重复并减少捕获过于宽泛的非常。
在catch子句中,指定块可以处理的非常类型,并利用竖线(|)分隔每个非常类型。
多个catch时,父类非常放在末了。

至此,Java中catch与非常匹配干系内容讲解先告一段落,更多内容请持续关注。

答疑

如果大家有问题或想理解更多前沿技能,请不才方留言或评论,我会为大家解答。

上一章

“全栈2019”Java非常第十一章:重写方法时只能抛出父类非常子集

下一章

“全栈2019”Java非常第十三章:访问非常堆栈跟踪信息

学习小组

加入同步学习小组,共同互换与进步。

办法一:关注头条号Gorhaf,私信“Java学习小组”。
办法二:关注"大众年夜众号Gorhaf,回答“Java学习小组”。
全栈工程师学习操持

关注我们,加入“全栈工程师学习操持”。

版权声明

原创不易,未经许可不得转载!

标签:

相关文章