
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
Java编程开发语言随着互联网的不断发展而被越来越多的程序员掌握,今天我们就通过案例分析来简单了解一下,Java编程异常分类与处理机制。
一、Exception和Error
Exception和Error是什么呢?这事要从Throwable讲起。
Throwable在java.lang包中,是Java中所有异常和错误的超类,Exception和Error都继承了Throwable。使用throw,catch等关键字的时候,会被判断是不是Throwable的子类。
其中,Exception通常指程序可预知的意外情况,常见的NPE就属于该类;
对应的,Error指的是不可预料的,难以处理的情况,通常是程序所在环境(JVM)出了严重问题,例如熟知的OOM。
这些错误类型有什么区别呢?处理方式是不是一样呢?
二、checkedvsunchecked
所有的异常和错误,都可以归为检查型异常(checkedException)和非检查型异常(uncheckedException)。
关于异常的场景,越早进行处理,通常收益越大,能在编译期就进行检测的,收益就大于在运行时进行处理。
检查型异常,就是编译时能够进行检测的异常,例如IOException,当文件操作的时候,编译器就会提醒进行异常处理,这里的FileNotFoundException就是检测型的IO异常,继承于IOException。
但是,编译时能提示的异常总归是有限的,大部分无法进行有效提示,例如NullPointerException。
所以,Error和RuntimeException类统称为非检查型异常,无法在编写时进行检测提示,而其他的都是属于检查型异常。
检查型的异常,有点像免责声明,提示使用者使用时有一定的风险,并给出了风险类型,以便使用者做出应对方案。非检查型,是无法提前预知的风险,不知道要发生什么,也不知道何时发生。
总之,两类维度,从不同阶段来说,分成了检查型和非检查型,以便用不同的方式处理,而从重要程度来说,又分为异常和错误,来表达其严重性。
那当异常实际发生的时候,JVM是如何处理这些异常的呢?
三、处理机制
简单来说,用了一张异常表来管理异常,记录了监听的代码块,对应的异常类型,以及异常发生时要跳转的目标代码(其实就是goto语句)。
其次,catchlater表达的是捕获异常后,如果不知道如何处理,就往上层抛,而不是吞掉异常,或者随便处理。因为在更高的层次,会有更多的信息来处理异常。好比一个案件如果在市里面无法处理,应当到省里面处理。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。