异常

异常定义

异常是运行过程中出现的错误

  • 人为错误:填写错误等
  • 随机错误:网络中断、内存耗尽等

一个健壮的程序必须处理各种各样的错误

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

NullPointerException

最常见的异常

空指针异常

由JVM抛出

如果一个对象为null,调用其方法或访问其字段就会产生

一般避免返回null

  • 字符串使用”“,而不是null
  • 数组返回空数组,而不是null

如果调用方一定要根据null判断,比如返回null表示文件不存在,那么考虑返回Optional

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

小结

自定义异常

在一个大型项目中,可以自定义新的异常类型,但是,保持一个合理的异常继承体系是非常重要的。

一个常见的做法是自定义一个BaseException作为“根异常”,然后,派生出各种业务类型的异常。

完整思维导图

参考

www.liaoxuefeng.com

JAVA 异常 基本知识的更多相关文章

  1. java异常基本知识

    Throwable     |--Error     |--Exception         |--RuntimeException                异常体系的特点:异常体系中的所有类 ...

  2. Java异常相关知识总结

    异常: 概述:java程序运行过程中出现的错误 常见的异常: StackOverflowError ArrayIndexOutOfBoundsException NullPointerExceptio ...

  3. 基础知识《十》java 异常捕捉 ( try catch finally ) 你真的掌握了吗?

    本文转载自  java 异常捕捉 ( try catch finally ) 你真的掌握了吗? 前言:java 中的异常处理机制你真的理解了吗?掌握了吗?catch 体里遇到 return 是怎么处理 ...

  4. 浅谈java异常[Exception]

    学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:589809992 我们一起学Java! 一. 异常的定义 在<java编程思想 ...

  5. Java异常之自定义异常

    哎呀,妈呀,又出异常了!俗话说:"代码虐我千百遍,我待代码如初恋". 小Alan最近一直在忙着工作,已经很久没有写写东西来加深自己的理解了,今天来跟大家聊聊Java异常.Java异 ...

  6. Java 多线程——基础知识

    java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 ...

  7. Java面试必备知识

    JAVA面试必备知识 第一,谈谈final, finally, finalize的区别. 第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可 ...

  8. java异常——RuntimeException和User Define Exception

    1.RuntimeException public class RuntimeException { public static void main(String[] args) { // TODO ...

  9. java异常面试常见题目

    在Java核心知识的面试中,你总能碰到关于 处理Exception和Error的面试题.Exception处理是Java应用开发中一个非常重要的方面,也是编写强健而稳定的Java程序的关键,这自然使它 ...

随机推荐

  1. 初识react中高阶组件

    高阶组件并不是一个组件,而是一个函数 这个函数返回值是一个组件,并且接受一个组件做为参数:并且返回一个新组件: function HighOC(WrapComponent){ //定义一个高阶组件 , ...

  2. Mybatis模糊查询结果为空的解决方案

    写在前面 Mybatis使用模糊查询,查询结果为空的解决方案,我的代码是 select * from sp_user where 1=1 <if test="username!=nul ...

  3. java_类的访问控制符

    1.分类: public protected default private是java中的访问控制修饰符. public String name; protected String name; Str ...

  4. java实现sftp文件上传下载

    /** * * @param filePath 文件全路径 * @param ftpPath 上传到目的端目录 * @param username * @param password * @param ...

  5. 数据结构篇(2) ts实现单循环链表

    JS的class可以通过extends关键字实现类似其他语言的继承效果,比起使用一个extends关键字,在es5中实现继承要复杂一些,可以通过修改原型链的方法实现继承,让一个原型对象等于另一个类型的 ...

  6. come on! 基于LinkedHashMap实现LRU缓存

    /** * @Description 基于LinkedHashMap实现一个基于'LRU最近最少使用'算法的缓存,并且最多存MAX个值 * @Author afei * @date:2021/4/25 ...

  7. openstack PCI透传(GPU)

    描述 kolla-ansible部署openstack的GPU透传方法 一.gpu物理服务器配置 在gpu服务器上主启用IOMMU 确认内核⽀支持iommu $ cat /proc/cmdline | ...

  8. 攻防世界-MISC:embarrass

    这是攻防世界高手进阶区的第二题,题目如下: 点击下载附件一,得到一个压缩包,解压后得到一个流量包 用wireshake打开,CTRL+F搜索字符串flag,记住要选择分组字节流 点击查找 在点击几次过 ...

  9. 4.26JMetre分离数据、响应断言、动态参数、响应管理

    修改 查询 默认查询 断言: 1.JSON断言 2.响应断言 :实际返回的值是否包含期望的值 参数化 相同的测试步骤,不同的测试数据.比如针对测试平台,使用不同的用户登陆进去来验证产品管理的业务. 在 ...

  10. [题解] 树(tree)

    题目大意 ​ 给定一颗 \(N\) 个点的有根树,其中 \(1\) 是树根,除了 \(1\) 以外的其他点 \(u\) 有唯一的父亲 \(Father_u\).同时,给定 \(M\) 条路径,第 \( ...