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程序的关键,这自然使它 ...
随机推荐
- 安装vue.js的方法
一.安装nodejs环境,可以再nodejs官网下载相应的版本安装在自己电脑: 一般国内需要切换npm到国内淘宝环境,安装好nodejs之后切换国内淘宝镜像就能使用国内的npm包(npm instal ...
- c++对于c的拓展_引用的本质是指针常量
本质:c++底层实现的指针常量(Type & ref =val; // Type *const ref =&val)
- python循环与基本数据类型内置方法
今天又是充满希望的一天呢 一.python循环 1.wuile与else连用 当while没有被关键'break'主动结束的情况下 正常结束循环体代码之后会执行else的子代码 "" ...
- rancher 添加集群
用rancher的管理账户登录rancher控制台首先创建用户 jinzs,后面用户绑定到要添加的集群上的 其次点全局,出现集群列表 >点添加集群 这里集群名称任意,只要你知道,该名称要对应实际 ...
- python入门基础-介绍、基础语法
一.anaconda下的spyder简介 Spyder 是一个强大的交互式 Python 语言开发环境,提供高级的代码编辑.交互测试.调试等特性,支持包括 Windows.Linux 和 OS X 系 ...
- Java学习day13
泛型类格式: 修饰符 class 类名<类型>{ } 常用T.E.K.V等形式的参数表示泛型 使用方式与C++的类模板相似,在创建对象时要明确数据类型 泛型方法定义格式: 修饰符<类 ...
- mysql的半同步复制
1. binlog dump线程何时向从库发送binlog mysql在server层进行了组提交之后,为了提高并行度,将提交阶段分为了 flush sync commit三个阶段,根据sync_bi ...
- 算法基础③--DFS解决迷宫问题入门
迷宫问题 通过深度优先搜索(DFS)方法实现. 迷宫问题一 一天蒜头君掉进了一个迷宫里面,蒜头君想逃出去,可怜的蒜头君连迷宫是否有能逃出去的路都不知道. 看在蒜头君这么可怜的份上,就请聪明的你告诉蒜头 ...
- 《Mybatis 手撸专栏》第6章:数据源池化技术实现
作者:小傅哥 博客:https://bugstack.cn - 手写Mybatis系列文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 码农,只会做不会说? 你有发现吗,其实很大一部分码农 ...
- Bugku CTF练习题---杂项---隐写3
Bugku CTF练习题---杂项---隐写3 flag:flag{He1l0_d4_ba1} 解题步骤: 1.观察题目,下载附件 2.打开图片,发现是一张大白,仔细观察一下总感觉少了点东西,这张图好 ...