思维导图03----Java异常处理机制

Java异常处理----思维导图

下载地址: https://download.csdn.net/download/q863672107/20016445


在这里插入图片描述


以下是自动转换的MakeDown文本


异常处理

异常处理机制

try-catch-finally

体会一 :
使用 try -catch-finally 处理编译时异常, 使得程序在编译时不再报错, 但运行时仍可能报错。相当于我们使用try-catch-finally将有个编译时可能出现的异常, 延迟到运行时出现。

体会二 :
开发中, 由于运行时异常比较常见, 我们也不会针对运行时异常编写 try-catch-finally 。
针对编译时异常, 我们说一定要考虑异常的处理。

功能/注意点

  • try

      • 将编译时异常包装后放到运行阶段再处理
      • try块中声明的变量, 在外部不能调用
        (外部声明, 内部赋值)
  • catch

    • catch块中对异常的处理方法

      • String getMessage()

        • 返回异常信息
      • void printStackTrace()

        • 打印异常出现的堆栈信息
    • 多个catch的顺序关系

      • 对父类异常的catch必须声明在子类的后面,否则编译错误
  • finally

    • 确保JVM不能自动回收资源的正常释放
      实现Closeable接口的类

      • 数据库连接
      • 输入输出流
      • Socket等资源
    • try-with-resources
      JDK9新特性

执行顺序

  • try

    • try块中将可能出现异常的代码包装起来, 一旦出现异常, 就会生成一个对应的异常类对象, 根据此对象的类型转到catch中进行匹配
    • try块中出现异常,try 块中异常语句后面的语句就不会执行
  • catch

    • catch到异常并处理后, 然后退出try-catch结构, catch后面的语句正常执行。
    • catch如果未能捕获异常, 异常自动抛出给调用者。
  • finally

    • finally中的语句一定会被执行

      • 会在throw或者return前面执行
    • catch没有捕获异常, 或者catch中出现异常, finally也会执行

    • try/catch中有return, 会将值暂存,然后执行finally语句,再执行return返回try/catch语句中的暂存值。(注意引用类型只是暂存地址值)

    • 当try/catch与finally语句中均有return语句,会提前return, 忽略try/catch中return。

异常处理机制 throws

“throws+异常类型” 写在方法的声明处, 声明方法执行时可能抛出的异常, 异常代码后续的代码不会被执行。

体会 : try-catch-finally 真正的将异常捕获并处理了
throws 的方式只是将异常抛给了方法的调用者, 并没有真正将异常处理掉。

手动生成并抛出异常 throw

(包含)编译时异常

throw Exception

  • 需要在编译期处理(try-catch或者throws)

运行时异常

throw RuntimeException

用户自定义异常类

(自定义异常类名)

继承现有的异常结构

  • 继承Exception

    • 包含编译时异常, 编译时必须处理
  • 继承RuntimeExceptiom

    • 运行时异常, 可以不显式处理

实现Serializable接口

private static final long serialVersionUID

  • 用来标识类版本, 序列化, 版本控制

无参构造

有参构造(String msg)

  • super(msg)

异常概述/体系结构

(常见异常类)

Errror

Java虚拟机无法解决的严重问题,
如: JVM系统内部错误, 资源耗尽等情况。
一般不编写针对性的代码进行处理。–>修改错误代码

  • 栈溢出SOF
    StackOverflowError
  • 堆溢出OOM
    OutOfMemoryError

Exception

因编程错误或偶然的外在因素导致的一般问题, 可以使用针对性的代码进行处理。

捕获错误最理想的是在编译期间, 但有的错误只有在运行时才会出现, 比如除数为0, 数组下标越界等。

分类: 编译时异常, 运行时异常
Exception类 都继承了 java.lang.Throwable类

  • 编译时异常
    checked受检异常

      • CloneNotSupportedException
    • ClassNotFoundException

    • IOException

      • FileNotFoundException
      • EOFException
  • 运行时异常
    unchecked非受检异常

    • RuntimeException

      • NullPointerException

      • IndexOutOfBoundsException

        • ArrayIndexOutOfBoundsException
        • StringIndexOutOfBoundsException
      • ClassCastException

      • NumberFormatException

      • InputMismatchException

      • ArithmeticException

throw和throws的区别

throw是生成异常的一种方式, throws是处理异常的一种方式

throws写在方法的声明处, 表示该方法可能抛出某个类型的异常对象

throw写在方法体内, 表示手动生成一个异常类型对象并抛出

如何选择处理方式

如果父类中重写的方法没有throws异常, 则子类重写的方法也不能thows异常, 只能try-catch

执行的方法中, 先后调用其他方法, 这几个方法是递进关系执行的, 建议throws后在外部处理

(内部try-catch可能就产生无意义的调用)

通过try-catch-finally实现资源的释放,。你也可以不写catch, 只用try-finally实现资源释放, 并将异常throws抛出

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

code tea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值