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程序的关键,这自然使它 ...
随机推荐
- 利用css3渐变效果实现圆环旋转效果
* { margin: 0; padding: 0; } .stage { width: 200px; height: 130px; margin: 100px auto; position: rel ...
- 常⽤的meta标签有哪些
meta 标签由 name 和 content 属性定义,用来描述网页文档的属性,比如网页的作者,网页描述,关键词等,除了HTTP标准固定了一些name作为大家使用的共识,开发者还可以自定义name. ...
- Shiro+springboot+mybatis+EhCache(md5+salt+散列)认证与授权-03
从上文:Shiro+springboot+mybatis(md5+salt+散列)认证与授权-02 当每次进行刷新时,都会从数据库重新查询数据进行授权操作,这样无疑给数据库造成很大的压力,所以需要引入 ...
- Typora原生态的图片格式快速转化为HTML格式
Typora更改图片样式 前言 在Typora中插入的图片,默认是居中且显示原图大小的,如果想要缩小显示,可以右击图片选择缩放图片. 但是,当我上传到博客园中时,并没有保留 居中.缩放 的样式 ...
- 日常使用mobx的小技巧
日常使用mobx的小技巧 由于自己开发的项目都是中小型项目,所以在技术选型上使用了mobx.但是使用过程中发现关于mobx的技术文章并不多.于是萌发出写这篇文章的想法.请轻喷. 更新控制store渲染 ...
- Emacs基础使用教程及常见命令整理
前言:最近使用Emacs,因此整理了官方中文教程中的一些知识点和常用的命令,方便查阅使用. 对于用习惯Windows的人来说,想要入门Emacs不是一件特别容易的事,但好在Emacs提供了官方的教程文 ...
- WPF行为基础
理解行为 复杂的UI效果(缩放.拖拽.平滑等)通过样式与触发器比较难以实现,通过引入行为模型来实现.使用行为也可以处理UI操作之外的业务 程序集引用 System.Windows.Interactiv ...
- ReadWriteLock 接口详解
ReadWriteLock 接口详解 这是本人阅读ReadWriteLock接口源码的注释后,写出的一篇知识分享博客 读写锁的成分是什么? 读锁 Lock readLock(); 只要没有写锁,读锁可 ...
- web安全之自己写一个扫描器
web安全之自己写一个扫描器 自己来写一个简单的目录扫描器,了解扫描器的运转机制和原理,因为python写脚本比较容易所以用python写一个网站目录扫描器. 第一步:我们需要导入所需要的库 1 im ...
- 好客租房57-props深入(4props的默认值)
1给props设置默认值 //导入react import React from 'react' import ReactDOM from 'react-dom' import ...