JAVA 异常 基本知识
异常
异常定义
异常是运行过程中出现的错误
- 人为错误:填写错误等
- 随机错误:网络中断、内存耗尽等
一个健壮的程序必须处理各种各样的错误
Java的异常是class
Object
Throwable
Error
- OutOfMemoryError
Exception
RuntimeException
- NullPoiterException
- IllegalArgumentException
IOException
继承关系图

捕获要求
- Error 及其子类,RuntimeException及其子类不需要捕获
- Exception及其子类,不包括RuntimeException及其子类
必须捕获
异常捕获
try、catch、finally
try中一般放置可能发生异常的语句
catch 捕获异常
多catch则按顺序匹配
- 匹配到了则不再继续匹配
可以捕获子类异常
一个catch可以捕获多个异常,用”|“合并到一起
finally
- 不论是否发生异常都会执行的代码
- 不是必须的
- 总是最后执行
抛出异常
异常的传播
追踪
- printStackTrace()方法可以打印出调用堆栈
异常的转换
抛出过程中转换了异常类型
- 用旧异常构建了一个新异常然后抛出
printStackTrace的时候 关键字为Caused by
- 用旧异常构建了一个新异常然后抛出
try、catch、filnally
一般正常情况,再try中抛出异常,catch捕获异常,final运行保底代码
如果catch中抛出的异常,会在final运行完毕后抛出
异常屏蔽,如果final也抛出异常,将会屏蔽掉catch中的异常
- 解决方法,使用Trrowable的
addSupressed()方法。保留被屏蔽的异常信息。
在捕获处是同getSuppressed()方法获取被屏蔽的异常信息
printStackTrace的时候 关键字为Suppressed
- 解决方法,使用Trrowable的
NullPointerException
最常见的异常
空指针异常
由JVM抛出
如果一个对象为null,调用其方法或访问其字段就会产生
一般避免返回null
- 字符串使用”“,而不是null
- 数组返回空数组,而不是null
如果调用方一定要根据null判断,比如返回null表示文件不存在,那么考虑返回Optional

从Java 14开始,如果产生了NullPointerException,JVM可以给出详细的信息告诉我们null对象到底是谁。

小结
自定义异常
在一个大型项目中,可以自定义新的异常类型,但是,保持一个合理的异常继承体系是非常重要的。
一个常见的做法是自定义一个BaseException作为“根异常”,然后,派生出各种业务类型的异常。
完整思维导图

参考
www.liaoxuefeng.com
JAVA 异常 基本知识的更多相关文章
- java异常基本知识
Throwable |--Error |--Exception |--RuntimeException 异常体系的特点:异常体系中的所有类 ...
- Java异常相关知识总结
异常: 概述:java程序运行过程中出现的错误 常见的异常: StackOverflowError ArrayIndexOutOfBoundsException NullPointerExceptio ...
- 基础知识《十》java 异常捕捉 ( try catch finally ) 你真的掌握了吗?
本文转载自 java 异常捕捉 ( try catch finally ) 你真的掌握了吗? 前言:java 中的异常处理机制你真的理解了吗?掌握了吗?catch 体里遇到 return 是怎么处理 ...
- 浅谈java异常[Exception]
学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:589809992 我们一起学Java! 一. 异常的定义 在<java编程思想 ...
- Java异常之自定义异常
哎呀,妈呀,又出异常了!俗话说:"代码虐我千百遍,我待代码如初恋". 小Alan最近一直在忙着工作,已经很久没有写写东西来加深自己的理解了,今天来跟大家聊聊Java异常.Java异 ...
- Java 多线程——基础知识
java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...
- Java面试必备知识
JAVA面试必备知识 第一,谈谈final, finally, finalize的区别. 第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可 ...
- java异常——RuntimeException和User Define Exception
1.RuntimeException public class RuntimeException { public static void main(String[] args) { // TODO ...
- java异常面试常见题目
在Java核心知识的面试中,你总能碰到关于 处理Exception和Error的面试题.Exception处理是Java应用开发中一个非常重要的方面,也是编写强健而稳定的Java程序的关键,这自然使它 ...
随机推荐
- Netty初见-三大组件-简单使用
Netty系列文章目录 Netty初见-三大组件-简单使用 文件编程-更新中---- 目录 Netty系列文章目录 三大组件 Channel与Buffer Selector 简单使用(ByteBuff ...
- 如何基于 ZEGO SDK 实现 Windows 一对一音视频聊天应用
互联网发展至今,实时视频和语音通话越来越被大众所依赖. 今天,我们将会继续介绍如何基于ZEGO SDK实现音视频通话功能,前两篇文章分别介绍了Android,Flutter平台的实现方式,感兴趣的小伙 ...
- [Where is My Chicken Soup] 鸡汤来咯
20岁的年纪安逸不是好的选择.尝试突破自己,你的本事不止你现在的样子. 保持适当的焦虑,它会一直鞭策你进步. 失败的原因有很多,并不代表你真的不行.但如果自己真就这么放弃了,那你才是真的不行.
- Mozi.HttpEmbedded嵌入式Web服务器
Mozi.HttpEmbedded 嵌入式Web服务器 项目介绍 Mozi.HttpEmbedded是一个基于.Net构建的嵌入式Web服务器,为.Net App提供web服务功能. 嵌入式的目标不是 ...
- 重磅!业界首个云原生批量计算项目Volcano正式晋级为CNCF孵化项目
摘要:4月7日,云原生计算基金会(CNCF)宣布,由华为云捐献的业界首个云原生批量计算项目Volcano正式晋级为CNCF孵化项目. 4月7日,云原生计算基金会(CNCF)宣布,由华为云捐献的业界首个 ...
- PHP的Laravel与Composer部署项目时常见问题
我们在部署PHP项目时,其实大部分的PHP项目会创建环境检测与一键**Install**页面. 但是,有许多的项目还采用了Composer部署. 什么是Composer 至于什么是Composer,我 ...
- 0基础学习docker
进入docker容器命令 docker exec -it 容器id bash 获取镜像 # 1.获取镜像,镜像托管仓库 docker search centos # 查询centos镜像 docker ...
- 2. flddler响应显示乱码问题解决方案
Fiddler是一款强大Web调试工具,它能记录所有客户端和服务器的HTTP请求. Fiddler启动的时候,默认IE的代理设为了127.0.0.1:8888,而其他浏览器是需要手动设置.但是一开始使 ...
- XCTF练习题---MISC---Recover-Deleted-File
XCTF练习题---MISC---Recover-Deleted-File flag:de6838252f95d3b9e803b28df33b4baa 解题步骤: 1.观察题目,下载附件 2. 根据题 ...
- XCTF练习题---WEB---command_execution
XCTF练习题---WEB---command_execution flag:cyberpeace{69383c056080bd6cd649578894d1d377} 解题步骤: 1.观察题目,打开场 ...