又抛异常了?可能你对Java的异常体系还没了解到位

举报
周杰伦本人 发表于 2022/11/29 18:24:59 2022/11/29
【摘要】 又抛异常了?可能你对Java的异常体系还没了解到位什么?这是谁的代码,抛出了大量的异常,这下全完了!写个代码抛出异常让人头疼,这篇文章就带你了解一下让你头疼的代码异常 异常的捕捉所有的代码异常都是Exception类的子类,所以我们在try catch捕捉异常的时候不指明具体异常的话就直接catch Exception,这样所有的异常都会被拦截。对应catch捕捉异常的匹配,遵循就近原则,...

又抛异常了?可能你对Java的异常体系还没了解到位

什么?这是谁的代码,抛出了大量的异常,这下全完了!写个代码抛出异常让人头疼,这篇文章就带你了解一下让你头疼的代码异常

异常的捕捉

所有的代码异常都是Exception类的子类,所以我们在try catch捕捉异常的时候不指明具体异常的话就直接catch Exception,这样所有的异常都会被拦截。对应catch捕捉异常的匹配,遵循就近原则,如果多个异常捕捉,第一个异常的捕捉匹配成功了,后面的异常捕捉就无需执行了。

下面这个例子体现了这一异常匹配逻辑:

    try {
      throw new Xpp();
    } catch(Xpp s) {
      System.out.println("Caught Xpp");
    } catch(XppBase a) {
      System.out.println("Caught XppBase");
    }

Xpp继承XppBase,像Xpp异常匹配成功了,第二个异常捕捉的处理就不执行了,同理,调换他们的位置,对XppBase的捕捉生效,第二个异常捕捉得不到执行。

Throwable类

Throwable类有两个异常的子类,Error和Exception。Error类表示的时候编译时和系统的错误,一般不用管这个类。Exception类是我们程序员需要处理的类。RuntimeException是运行时异常,一般是代码逻辑写的有问题导致的,比如空指针、数组越界等等。

Exception类

Exception类继承了Throwable类,Throwable类提供了getMessage()方法用来获取详细信息,提供printStackTrace()方法打印调用栈路径。

下面这张图说明了我们上面提到了类的之间的关系,希望对你理解Java的异常体系有所帮助:

总结

这篇文章我们主要说了Java的异常体系,虽然知识点不太多,但这些知识点非常重要,我们开发如果不了解Java异常的话,我们就会对异常非常迷茫,遇到代码报错也会束手无策,这篇文章的内容包括如何捕捉异常信息,以及异常体系的Throwable类、Exception类等等异常类,对应异常类的匹配,如果父类被捕捉了,子类的异常就不会捕捉了。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。