当前位置: 首页 > news >正文

07-Java异常分类以及处理机制

1.异常概念

在这里插入图片描述
Java标准库内建了一些通用的异常,这些类以Throwable为顶层父类。Throwable又派生出Error类和Exception类。

1.错误:是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。

例如,Java 虚拟机运行错误(Virtual MachineError),当JVM 不再有继续执行操作所需的内存资源时,将出现 OutOfMemoryError。这些异常发生时,Java 虚拟机(JVM)一般会选择线程终止。

2.异常:Exception以及他的子类,代表程序运行时发送的各种不期望发生的事件。可以被Java异常处理机制使用,是异常处理的核心.。

例如,数据库连接中断,空指针,数组下标越界。

注意:异常和错误的区别:异常能被程序本身可以处理,错误是无法处理。

2.异常分类

在这里插入图片描述
总体上我们根据 Javac 对异常的处理要求,将异常类分为二类。

1.非检查异常( unckecked exception ): Error 和 RuntimeException 以及他们的子类。 javac 在编译时,不会提示和发现这样的异常,不要求在程序处理这些异常。

所以如果愿意,我们可以编写代码处理(使用 try…catch…finally )这样的异常,也可以不处理。对于这些异常,我们应该修正代码,而不是去通过异常处理器处理 。

这样的异常发生的原因多半是代码写的有问题。如除0错误 ArithmeticException ,错误的强制类型转换错误 ClassCastException ,数组索引越界 ArrayIndexOutOfBoundsException ,使用了空对象NullPointerException 等等。

2.检查异常( checked exception ): 除了 Error 和 RuntimeException 的其它异常。 javac 强制要求程序员为这样的异常做预备处理工作(使用 try…catch…finally 或者 throws )。在方法中要么用 try-catch 语句捕获它并处理,要么用throws子句声明抛出它,否则编译不会通过。

这样的异常一般是由程序的运行环境导致的。因为程序可能被运行在各种未知的环境下,而程序员无法干预用户如何使用他编写的程序,于是程序员就应该为这样的异常时刻准备着。如 SQLException , IOException , ClassNotFoundException 等。

需要明确的是:检查和非检查是对于 javac 来说的,这样就很好理解和区分了。

3.异常处理

1.通过try…catch语句块来处理

2.在具体位置不处理,直接抛出,通过throws/throw到上层再进行处理

Throw和throws的区别:1.throws 用在函数上,后面跟的是异常类,可以跟多个;而 throw 用在函数内,后面跟的 是异常对象
2.throws用来声明异常,让调用者只知道该功能可能出现的问题,可以给出预先的处理方式;
3.throw抛出具体的问题对象,执行到throw,功能就已经结束了,跳转到调用者,并讲具体的问题对象抛给调用者。
4.throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常对象。
5.两者都是消极处理异常的方式,只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。
http://www.lryc.cn/news/6894.html

相关文章:

  • 用到的C++的相关知识-----未完待续
  • JavaScript刷LeetCode拿offer-贪心算法
  • selenium
  • SpringMVC的视图
  • idea使用本地代码远程调试线上运行代码---windows环境
  • 简单记录简单记录
  • 源码系列 之 ThreadLocal
  • C语言入门(1)——特点及关键字
  • react中useEffect和useLayoutEffect的区别
  • NoSQL(非关系型数据库)与SQL(关系型数据库)的差别
  • new bing的申请与使用教程
  • yaml配置文件
  • 284. 顶端迭代器
  • 自学前端最容易犯的10个的错误,入门学前端快来看看
  • 【ADRC控制】使用自抗扰控制器调节起动机入口压力值
  • 剑指 Offer Day2——链表(简单)
  • Final Cut Pro 10.6.5
  • Modelsim仿真操作指导
  • 你知道这20个数组方法是怎么实现的吗?
  • 《系统架构设计》-01-架构和架构师概述
  • 第七届蓝桥杯省赛——5分小组
  • 中国专科医院行业市场规模及未来发展趋势
  • 【刷题笔记】--两数之和Ⅳ,从二叉树中找出两数之和
  • 浏览器渲染原理JavaScript V8引擎
  • 在TheSandbox 的「BOYS PLANET」元宇宙中与你的男孩们见面吧!
  • 数据结构与算法:java对象的比较
  • python(16)--类
  • CNI 网络流量分析(七)Calico 介绍与原理(二)
  • API安全的最大威胁:三体攻击
  • 分布式事务解决方案——TCC