写点什么

Java 并发原理解析!我们来捋一捋 JAVA 的异常

发布于: 2 小时前

上图中 Exception 有两种类型的异常,我们来看一下


RuntimeException:不可预知的,程序应当自行避免


何为不可预知?如:数组下标越界,访问对象空指针等,这种异常是我们小伙伴们在编写程序时要尽量避免。也就是我们程序员是能够避免的

如针对空指针异常,我们应该在编程的时候,加上空指针判断,if(obj == null) 如何如何,这样就避免了空指针异常。


非 RuntimeException:可预知的,编译器可检查的异常


可预知,如:在我们打开一个文件时,如文件不存在引用的异常。

这种异常编译器会检查出来,必须需要处理的

这个也称之为 Checked Exception 异常类型

责任归属

我们从责任角度看


1、Error 属于 JVM 需要承担的责任

2、RuntimeException 是程序应该承担的责任

3、非 RuntimeException(CheckedException)可检查异常是 JAVA 编译器应该承担的责任


上面代码直观一点:



我们看到 Error 和 RuntimeException 编译器是不检查的,而 CheckedExcepton 异常编译器是检查的,也就是我们程序员是必须要捕获处理的。那怎么处理呢?


1、try-catch 方式



用 try-catch 方式捕获这个异常,可以在 catch 代码段进行异常逻辑处理,这个就按照实际业务而定。如上图代码是 FileNotFound 异常,根据这个类型我们就知道是文件句柄不存在,那我们应该做哪些处理。如:提示一下用户该文件不存在


2、上抛异常方式


在复杂的业务中,我们的程序员自己写的模块,很有可能被其他程序员写的模块进行引用,为了能够让其他程序员知道我们模块的异常,并要他们要进行处理,我们就可以采用上抛异常方式



我们看一下上层调用的处理



我们看到上抛异常,是需要调用方进行处理的。那处理的方式是什么呢?其实就是上面讲的 try-catch 或继续上抛。

常见的 Error 和 Exception

一、RuntimeException


1、NullPointerException - 空指针引用异常

2、ClassCastException - 类型强制转换异常

3、IllegalArgumentException - 传递非法参数异常

4、IndexOutOfBoundsException - 下标越界异常

5、NumberFormatException - 数字格式异常


二、非 RuntimeException


1、ClassNotFoundException - 找不到指定 class 异常

2、IOException - IO 操作异常


三、Error


1、NoClassDefFoundError - 找不到 class 定义的异常

2、StackOverflowError - 深递归导致栈被耗尽抛出的异常

3、OutOfMemoryError - 内存溢出异常

总结

今天老顾介绍了异常的相关知识,这点在我们系统开发时是非常重要的,尤其在我们设计系统时,要定义我们系统自己的异常,这个需要整体规划异常类型、异常 Code、异常信息等,能够起到很好的排查问题,并方便捕获处理

小疑惑

总结

大型分布式系统犹如一个生命,系统中各个服务犹如骨骼,其中的数据犹如血液,而 Kafka 犹如经络,串联整个系统。这份 Kafka 源码笔记通过大量的设计图展示、代码分析、示例分享,把 Kafka 的实现脉络展示在读者面前,帮助读者更好地研读 Kafka 代码。


需要免费领取这份 Kafka 源码笔记的铁汁们,麻烦帮忙转发一下这篇文章+关注我,然后戳这里免费获取!



用户头像

VX:vip204888 领取资料 2021.07.29 加入

还未添加个人简介

评论

发布
暂无评论
Java并发原理解析!我们来捋一捋JAVA的异常