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

时间:2022-11-03 11:04:14

又抛异常了?可能你对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类等等异常类,对应异常类的匹配,如果父类被捕捉了,子类的异常就不会捕捉了。

❤️ 感谢大家

如果你觉得这篇内容对你挺有有帮助的话:

  1. 欢迎关注我❤️,点赞????????,评论????,转发????
  2. 关注盼盼小课堂,定期为你推送好文,还有群聊不定期抽奖活动,可以畅所欲言,与大神们一起交流,一起学习。
  3. 有不当之处欢迎批评指正。