浅谈Java异常处理机制及项目中的的规范处理方法

2023-10-28

一、前言

  本文主要讲述异常处理的机制和原理,以及探讨开发Java程序时,每一层如何进行异常处理?异常何时被抛出?何时被记录?如何记录?记录checked异常还是unChecked异常?异常是否应该呈现到前端页面?如何设计一个异常框架等问题。

二、基本概念

  异常是程序在运行时出现的不正常情况。是Java按照面向对象的思想将问题进行对象封装。这样就方便于操作问题以及处理问题。

  异常处理的目的是提高程序的健壮性。你可以在catch和finally代码块中给程序一个修正机会,使得程序不因不可控制的异常而影响程序的流程。同时,通过获取Java异常信息,也为程序的开发维护提供了方便。

**Java异常类层次结构图**

  • Java中的异常用对象来处理,并定义java.lang.Throwable作为所有异常的超类。Throwable分成了两个不同的分支,Exception(异常)和 Error(错误);

  • 其中异常类Exception又分为运行时异常(RuntimeException)和非运行时异常。或不受检查异常(Unchecked Exception)和检查异常(Checked Exception);

  • 异常是针对 方法 来说的,抛出、声明抛出、捕获和处理异常都是在方法中进行的;

  • Java异常处理通过5个关键字try、catch、throw、throws、finally进行管理;

  • Error(错误):灾难性的致命的错误,是程序无法控制和处理的。

      Error类对象由 Java 虚拟机生成并抛出,大多数错误与代码编写者所执行的操作无关。例如,Java虚拟机运行错误、内存溢出。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止;还有发生在虚拟机试图执行应用时,如类定义错误、链接错误。这些错误是不可查的,因为它们在应用程序的控制和处理能力之外,而且绝大多数是程序运行时不允许出现的状况。对于设计合理的应用程序来说,即使确实发生了错误,本质上也不应该试图去处理它所引起的异常状况。

  • Exception(异常):通常情况下是可以被程序处理的,并且在程序中应该尽可能的去处理这些异常。。

  • 运行时异常和受检查异常

    • 运行时异常 (unChecked异常)

        RuntimeException类及其子类都被称为运行时异常。这些异常一般是由程序逻辑错误引起的,属于应该解决的Bug,程序应该从逻辑角度避免这类异常的发生,不推荐try-catch来捕获处理,但是有时候为了增强用户体验,保证Crash次数降到最低,会人为捕捉一些运行时异常。这种异常的特点是Java编译器不去检查它,也就是说,当程序中可能出现这类异常时,即使没有用try-catch语句捕获它,也没有用throws字句声明抛出它,还是会编译通过。但在运行时会被系统自动抛出。

    • 非运行时异常 (checked异常)

        除了RuntimeException类及其子类外,其他的Exception类及其子类都属于非运行时异常,从程序语法角度讲是必须进行处理的异常,如果不处理程序就不能编译通过。

  • 异常转型和异常链

  我们做的JEE项目时候,一般会有三层的结构:持久层、逻辑层、展现层。异常也是如此的,当我们各个层之间传递异常,我们就需要先封装,然后传递。

  • 异常链示例
catch (SQLException e)
    {
        throw new JdbcException(e);
    }

三、异常处理机制

  在 Java 应用程序中,异常处理机制为:抛出异常,捕捉异常。

  • 抛出异常

  当一个方法出现错误引发异常时,方法创建异常对象并交付运行时系统,异常对象中包含了异常类型和异常出现时的程序状态等异常信息。运行时系统负责寻找处置异常的代码并执行。

  该方法的调用者必须处理或者重新抛出该异常。当方法的调用者无力处理该异常的时候,应该继续抛出,所经方法都层层上抛获取的异常,若最终都没有被处理,将交由虚拟机处理。处理也很简单,就是打印异常消息和堆栈信息,记录日志。

  • 捕捉异常

  在方法抛出异常之后,运行时系统将转为寻找合适的异常处理器(exception handler)。潜在的异常处理器是异常发生时依次存留在调用栈中的方法的集合。当异常处理器所能处理的异常类型与方法抛出的异常类型相符时,即为合适的异常处理器。

  运行时系统从发生异常的方法开始,依次回查调用栈中的方法,直至找到含有合适异常处理器的方法并执行。当运行时系统遍历调用栈而未找到合适的异常处理器,如果出现异常的线程为主线程,则整个程序运行终止;如果非主线程,则终止该线程,其他线程继续运行。

  在方法中用try-catch语句捕获并处理异常,catach语句可以有多个,用来匹配处理异常。并且尽量将捕获底层异常类的catch子句放在前面。

  异常总是先被抛出,后被捕捉的。

  • Java规定

  对于可查异常必须捕捉、或者声明抛出。允许忽略不可查的RuntimeException和Error。

  RuntimeException由业务逻辑保证。

3.1、抛出异常实例(throws 和 throw)

public class Throws {
   
    public static void main(String[] args) throws Exception{
   //抛出异常类
	System.out.println(10 / 0);
	throw new Exception("抛出异常对象");
	//System.out.println("throw后面的代码不再执行");
    }
}

3.2、捕获异常实例(try-catch 和 finally)

import 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浅谈Java异常处理机制及项目中的的规范处理方法 的相关文章

  • 了解java

    目录 一 Java是什么 二 Java语言特性 1 简单性 2 面向对象 3 健壮性 4 多线程 5 可移植性 跨平台 三 Java两种核心机制 1 Java虚拟机 Java Virtal Machine 2 垃圾收集机制 Garbage
  • 今天发现rabbitMQ消息堆积

    发现有三十多万的消息堆积在10的queue里没有被消费 记录一下查看问题的步骤 1 jps 找出程序的PID 2 jstack PID 查看线程dump 发现rabbitMQ的consumer worker线程block住了 Thread
  • 黑马程序员---从头开始,回忆JAVA基础之JAVA用十六进制表示浮点数的方法

    在二进制文件中 存储数据的格式为16进制 下面举例说明27 0f在二进制文件中怎么表示 float 共计32位 折合4字节 由最高到最低位分别是第31 30 29 0位 31位是符号位 1表示该数为负 0反之 30 23位 一共8位是指数位
  • 根据图片地址得到文件流

    得到文件流 param url 图片地址 return public static byte getFileStream String url try URL httpUrl new URL url HttpURLConnection co
  • 5、面向对象的设计思想

    一 面向对象设计思想 1 1 面向过程的设计思想与面向对象的设计思想 例如 我要去新疆 面向过程 我开车 我挂挡 我踩油门 我过河北 我过陕西 面向对象 我命令车去新疆 车怎么去不关我事 信息封装在这这个类的内部 我不用去了解车整个开动的过
  • java中的file.encoding属性到底由什么决定?

    首先先上一段代码 public class PropertiesTest public static void main String args System out println file encoding System getProp
  • 对象数组题目 Student类

    package object oriented02 对象数组题目 定义类的Student 包含三个属性 学号为number 年级为state int 成绩为score int 创建20个学生对象 学号为1到20 年级和成绩都是随机产生 问题
  • 7.java类中的方法

    1 类中的方法 1 实例方法 格式 访问限制修饰符 方法的返回值数据类型 方法名称 参数列表 方法体 解释 访问限制修饰符 public 缺省的 方法的返回值数据类型 就是方法的执行结果类型 有返回值时 方法的返回值数据类型一定是方法执行结
  • Java中变量的作用域【Java基础】

    最近在看 Thinking in Java 想把Java基础再巩固一下 在博客上遇到的以前没注意到的知识点或者较难的知识点记录下来 与大家分享 Java中的基本类型变量的作用域为 int x 1 变量x的作用域只在大括号内 System o
  • 各种注释总结

    jsp注释 html注释
  • 进制及进制转换详解。原码、反码、移码,补码区别介绍。(通俗易懂)

    目录 前言 一 十进制 n进制 进制转换详解 1 先说说什么是进制 2 二进制介绍 3 十进制 n进制 进制转换详解 重点 十进制 gt n进制 2 8 16 n进制 2 8 16 gt 十进制 非十进制间的互相转化 二 原码 反码 移码
  • ubuntu 11配置hadoop

    最近没事 研究下ubuntu 配置hadoop ubuntu版本 64 bit 11 04 hadoop版本 hadoop1 2 1 一 在Ubuntu下创建hadoop用户组和用户 1 创建hadoop用户组 sudo addgroup
  • JAVA,异常

    异常概念 通常大家认为异常就是错误 但这个错误有很多种 1 语法错误 2 JVM虚拟机错误 3 平台错误 4 程序运行错误 平台或者资源或者逻辑 数值等错误 常见的异常 1 java lang NullPointerException 空指
  • java动态加载jar包,并运行其中的类和方法

    flink 相关 https www toutiao com article 6883793897495986691 动态加载jar包 在实际开发中经常会需要用到 尤其涉及平台和业务的关系的时候 业务逻辑部分可以独立出去交给业务方管理 业务
  • 第一个java程序helloworld代码的编写

    第一个java程序helloworld代码的编写 文章目录 第一个java程序helloworld代码的编写 toc 一 项目 二 认识JVM JRE和JDK 2 1 JVM是什么 2 2 JVM的主要功能和作用 2 3 JRE和JDK J
  • 对接百度api的工具类:Base64Util,FileUtil,HttpUtil

    对接百度api的工具类 Base64Util FileUtil HttpUtil package com baidu ai aip utils Base64 工具类 public class Base64Util private stati
  • springboot跳转页面

    SpringBoot里面只有src目录 在src main resources下面有两个文件夹 static 和 templates springboot默认static中放静态页面 而templates中放动态页面 themleaf和fr
  • jeecgboot问题解决方案

    常见问题Q A JEECG老版在线文档 点击进入 1 后台访问提示token错误 报错截图 解决方案 JeecgBoot后台的所有请求访问 增加了token机制 所以不能直接访问后台 而需要通过前台登录才能访问 默认前台访问地址 http
  • AQS底层原理

    1 AQS能干嘛 是什么 能干嘛 加锁就会有阻塞 有阻塞就需要排队 实现排队必然需要有某种形式的队列来进行管理 是什么 废话 抽象的队列同步器 翻译一下 AQS是用来构建锁或者其它同步器组件的重量级基础框架及整个JUC体系的基石 通过内置的
  • Java对象的快速复制的几种方式

    浅拷贝 深度复制 BeanUtils copyProperties 对象的克隆是指创建一个新的对象 且新的对象的状态与原始对象的状态相同 当对克隆的新对象进行修改时 不会影响原始对象的状态 注释 clone 是object类的protect

随机推荐

  • 测试用例设计方法2——边界值

    介于有效等价类和无效等价类之间 一 边界值 三点 上点 边界上的点 离点 离上点最近的点 根据上点的精度确定 内点 边界有效范围内的任意一点 如何确定离点 若边界是闭区间 则离点在外 如用户名长度 6 18 之间 上点为6 18 离点为5
  • 浅谈C++元编程

    随着 C 11 14 17 标准的不断更新 C 语言得到了极大的完善和补充 元编程作为一种新兴的编程方式 受到了越来越多的广泛关注 结合已有文献和个人实践 对有关 C 元编程进行了系统的分析 首先介绍了 C 元编程中的相关概念和背景 然后利
  • VS019创建C++工程基本步骤

    1 打开VS2019新建工程 2 选择C 空项目 点击下一步 3 设置项目名称和项目位置 然后点击创建 4 设置自己喜欢的布局方式 关于背景网上有很多设置方法 5 新建入口Main c工程 右键源文件 添加 新项目 6 选择C 文件 取个名
  • 持续集成与持续交付(CI/CD):探讨在云计算中实现快速软件交付的最佳实践

    文章目录 持续集成 CI 的最佳实践 持续交付 CD 的最佳实践 云计算环境下的特别注意事项 个人主页 程序员 小侯 CSDN新晋作者 欢迎 点赞 评论 收藏 收录专栏 云计算 文章内容 软件交付 希望作者的文章能对你有所帮助 有不足的地方
  • python爬取站长素材上的图片

    Python爬取站长素材上的图片 罗纳尔康 首先这是一个学习的案例 我将其记录下来 因为所学的内容有点多 爬取这个图片 我是用的xpath来解析网页 当然也可以用bs4来进行解析 看个人喜好 该案例比较简单 但涉及的内容并不少 1 分析每页
  • Web3域名,会是新的应用场景么?

    在互联网时代 域名一直都是一个十分有价值的资产 无论是个人还是企业 想要在互联网中建立一个交互性的平台 网站 都需要一个域名来与 IP 地址进行映射 域名是具有唯一性的 因此 它遵循 先到先得 的原则 即一旦有用户注册了一个域名之后 其他人
  • 【序列比对】Needleman-Wunsch(全局)和Smith-Waterman(局部)算法py实现(多条回溯路径,三叉树思路,超详细注释)

    Needleman Wunsch和Smith Waterman算法py实现 多条回溯路径 话不多说 直接上结果图 多条回溯路径 原理 代码详解 以NW为例 导入包以及参数设置 import numpy as np sequence 1 AA
  • cmd命令提示符使用功能大全

    cmd命令提示符使用功能大全 winver 检查windows版本 arch 显示机器的处理器架构 1 uname m 显示机器的处理器架构 2 uname r 显示正在使用的内核版本 dmidecode q 显示硬件系统部件 SMBIOS
  • 串口收数数码管显示(串口带协议带校验)

    将上位机采集到的数据通过串口发给单片机 数码管显示收到的信息 数码管显示程序见上篇文章 串口带协议收发在我的文章中也可以找到 mian函数 BYTE CODE 10 0x3f 0x06 0x5b 0x4f 0x66 0x6d 0x7d 0x
  • ArgoCD的安装与部署

    一 简介 Argo CD 是一个为 Kubernetes 而生的 遵循声明式 GitOps 理念的持续部署 CD 工具 它的配置和使用非常简单 并且自带一个简单易用的 Dashboard 页面 并且支持多种配置管理 模板工具 例如 Kust
  • 区块链开发入门之一

    基本概念 区块链的核心理念 一个分布式数据库 其基本单元为区块 取款用来存储数据 区块之间前后关联 通过时间排序 基于PKI 摘要算法实现集体验证 维护 区块链提供了一个分布式总账 让用户对总账的数据实现共同治理 因而建立互信 区块链基本逻
  • mscrm导入其他组织的数据库

    在部署mscrm的时候 有时候会有这样的问题 新建一个组织 如何让这个组织使用已经存在的另一个组织的数据库 即多个组织公用一个crm数据库 1 打开部署管理器 开始 所有程序 Microsoft Dynamics CRM 部署管理器 2 点
  • [docker]七、docker镜像的制作(超详细)、docker镜像结构原理、镜像的分享——harbor

    目录 1 镜像 images 1 1 Dockerfile 是制作镜像的文件 2 镜像结构原理 2 1 base 镜像 2 1 1 rootfs和bootfs 2 1 2 base 镜像提供的是最小安装的 Linux 发行版 2 2 镜像分
  • 气液固三相线识别—Langmuir部分复现

    关注 M r m a t e r i a l color Violet rm Mr material Mr material
  • 记 Git 报错:refusing to merge unrelated histories

    问题追溯 创建本地项目 我在本地电脑上创建了一个项目admin hz 创建码云同名项目admin hz 创建方法我另一篇文章有讲 项目地址 https gitee com liushijun admin hz git 将本地项目与远程项目关
  • jira字段配置(域配置)_到期日、时间跟踪等根据需要自行配置

    最近 使用jira进行项目管理 出现一些问题 对于其中一些配置 做下记录 后续方便查看 也给需要的人一个参考 传送门 jira使用文档 jira权限设置 各个项目组查看不同项目 jira字段配置 域配置 到期日 时间跟踪等根据需要自行配置
  • AI 培训之坑,了解一下?

    今天阅读微信公众号的文章 又刷到了一篇AI程序员平均年薪多少多少 Python前景多好多好的文章 我立刻猜到 这肯定又是某家培训给自己的AI课程打的广告 如今各种公众号类似的文章实在太多了 感觉给没转行又想入坑的人画了很大一张饼 我本人就是
  • Spring学习13-中IOC(工厂模式)和AOP(代理模式)的详细解释

    我们是在使用Spring框架的过程中 其实就是为了使用IOC 依赖注入 和AOP 面向切面编程 这两个是Spring的灵魂 主要用到的设计模式有工厂模式和代理模式 IOC是工厂模式参考 设计模式 工厂模式 场景以及优缺点 目的就是应对变化
  • 论文笔记:An iterative framework with active learning to match segments in road networks

    CARTOGRAPHY AND GEOGRAPHIC INFORMATION SCIENCE 2023 1 intro 1 1 背景 当地理实体以不同的方式表示和存储在不同的来源中时 匹配和整合使得可以获得更详细的空间数据 地图匹配的关键是
  • 浅谈Java异常处理机制及项目中的的规范处理方法

    一 前言 本文主要讲述异常处理的机制和原理 以及探讨开发Java程序时 每一层如何进行异常处理 异常何时被抛出 何时被记录 如何记录 记录checked异常还是unChecked异常 异常是否应该呈现到前端页面 如何设计一个异常框架等问题