异常

异常定义

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

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

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

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. 设计模式之:享元模式FlyweightPattern的实现

    享元模式的理解: 享元模式的定义:运用共享技术支持大量细粒度对象的复用: Flyweight Pattern Definition:Use sharing to support large numbe ...

  2. Java报错: A component required a bean of type 'com.sirifeng.testmybatis.mapper.BookMapper' that could not be found.

    在学习Spring-boot-mybatis时,报错A component required a bean of type 'com.sirifeng.testmybatis.mapper.BookM ...

  3. Struts2-day1总结

    1.Struts2的基本执行流程(详见我的博客) 2.Struts2的分模块开发 如果有多个项目的Struts.xml写在一起,容易造成数据混乱,所以可以使用分模块的方法,在项目下新建*.xml配置文 ...

  4. Spring配置文件-Bean实例化的三种方式

    1.无参构造方法实例化(详见我的博客) 2.工厂静态方法实例化 创建StaticFactory类 public class StaticFactory { public static UserDao ...

  5. 还原lvm逻辑卷创建整个过程

    很多情况入职的时候,系统可能已规划过的,但是有的信息也不是很完整,比如下面的lvm逻辑卷我们先不管对与错,利用一些工具来了解当前lvm逻辑卷的情况 系统采样: [root@fp-web-112 var ...

  6. Cookie&&Session&&jsp入门

    会话技术 会话:一次会话中包含多次请求和响应. 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止 功能:在一次会话的范围内的多次请求间,共享数据 方式: 客户端会话技术:Coo ...

  7. 《手写Mybatis》第4章:Mapper XML的解析和注册使用

    作者:小傅哥 系列:https://bugstack.cn/md/spring/develop-mybatis/2022-03-20-%E7%AC%AC1%E7%AB%A0%EF%BC%9A%E5%B ...

  8. OpenHarmony标准设备应用开发(一)——HelloWorld

    (以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点) 邢碌 本文是 OpenAtom OpenHarmony(以下简称"OpenHarmony")标准设 ...

  9. 【原创】浅谈指针(十二)关于static(上)

    0.前言 这个系列基本上是一月一更到两月一更 今天写一篇关于static的,内含大量干货,做好准备 1.基础知识的回顾 1.1.内存的种类 一般来说,我们之前已经讲过的变量(或者说是内存)可以大体分为 ...

  10. SpringMVC的文件上传下载,异常处理,拦截器的小总结

    文件的上传和下载 我们通常在访问网页时会使用到文件的上传与下载的功能,那么他是如何实现的呢? 1 下载: ResponseEntity :用于控制器方法的返回值类型,该控制器方法的返回值就是响应到浏览 ...