Java:什么是异常?什么是异常处理?

news2024/12/29 13:52:49

  Java中的异常处理不是一个容易的话题。初学者很难理解,即使是经验丰富的开发人员也可以花几个小时讨论应该如何抛出或处理哪些Java异常。

  这就是为什么大多数开发团队都有自己的一套关于如何使用它们的规则。如果你是一个团队的新手,你可能会惊讶于这些规则与你以前使用过的规则有多么不同。

  什么是异常?

  简而言之,异常是程序执行过程中的异常情况。

  出现问题时会发生异常。试图打开文件,但文件不存在?这就是异常。试图对对象调用方法,但变量为空?这也是异常。

  什么是异常处理?

  异常是不应该发生的坏事。但既然它们确实发生了,我们就需要处理它们。这种“处理”就是我们所说的异常处理。

  异常处理是一种错误处理机制。当出现问题时,会抛出异常。如果不执行任何操作,则异常会导致应用程序崩溃。

  或者您可以选择处理异常。也就是说,您确认问题发生了,防止应用程序崩溃,并采取必要的步骤,以便从错误中恢复或失败。

  一如既往的错误处理

  异常处理是一种错误处理机制,但它不是唯一的机制。如今,绝大多数编程语言都将异常处理作为一项功能提供,但情况并不总是这样。

  

  没有异常的语言如何处理错误?

  一种流行的方法是返回错误代码。例如,假设您有一个C函数,它接受一个整数数组和一个整数,然后搜索并返回与指定数字匹配的第一个项的索引。

  当在数组中找不到该项时该怎么办?一个普遍的选择是返回-1。这种方法的优点是让代码易于推理:不会打断代码,也不会跳过代码。只是返回值的旧函数。

  另一方面,这种错误处理策略鼓励函数的使用者始终检查错误值。

  这些验证的数量之多会使代码受到污染。大量的防御性检查可能会隐藏重要的业务逻辑,从而降低代码的可读性和可维护性。

  错误代码的另一个严重缺点是缺乏上下文。您可能知道代码“-5”意味着找不到某个文件,但哪个文件?整数不能轻易携带该信息。

  这种方法的另一个问题是,有时,您无法返回值(例如,想想构造函数)。初始化对象时出错?有了错误代码,你就无能为力了。

  异常的例外情况

  出现异常是为了解决你刚刚读到的问题。

  当抛出异常时,程序的控制流被中断。如果没有人处理该异常,则会导致程序崩溃。用户将看到异常消息,但他们很可能无法理解。消息甚至可能无法本地化为其语言。

  简而言之,这不是一个好的用户体验。

  因此,您需要处理异常(即使只是为了记录问题、显示更友好的错误消息,然后退出应用程序)。

  为了处理抛出的异常,我们必须捕获它。我们通过使用异常处理块来实现这一点。当我们捕获异常时,程序的流控制被处理到异常处理块。在那里,我们可以做出必要的安排来处理例外情况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/360480.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HR:你会Python数据分析吗?

之前看到一个段子: 以前去面试,HR会问你“精通office吗?” 现在去面试,HR会问你“会Python数据分析吗?” 图片来源:网络 大数据时代,无论是数据分析师、研发,到运营、市场、产品经…

AI 在编程、写作、绘画领域的占卜:从 GitHub Copilot 到 ChatGPT,再到 Stable Diffusion...

PS:就当前节点(2023.02.22)而言,我虽然研究过一段时间传统的机器学习,但是并不擅长深度学习等领域,所以很多 AI 领域相关的词汇,我是不擅长的,只为自己总结一下,方便在未…

Android的NDK之编译LED的动态库so和使用so

文章目录 目录 文章目录 基础信息 我的AS基础信息 gradle插件版本 硬件信息 基础知识 externalNativeBuild 具体操作步骤 下载NDK库 加入JNI相关C语言代码和mk文件 local.properties里配置ndk路径 gradle配置 配置externalNativeBuild 打包动态库 引用第三方so库…

为什么要使用微服务架构?【微服务架构出现的背景】

随着互联网技术的发展,传统的应用架构已满足不了实际需求,微服务架构就随之产生。那么传统应用架构到底出了什么问题呢?又如何解决?接下来我们将从传统单体架构的问题开始,对为什么需要微服务架构进行详细讲解。传统单体应用架构的问题通常…

钓鱼网站+persistence植入后门程序+创建用户

本实验实现1: 利用MS14-064漏洞,会生成一个网址,诱导用户点击,打开后,会直接连接到发起攻击的主机上,即可攻击成功。 本实验实现2: 一旦入侵成功,则拿到控制目标主机的部分权限&…

春种一粒粟:企业如何修炼好云原生内功?

日月盈昃,辰宿列张。寒来暑往,秋收冬藏。《千字文》里蕴藏了一种人与天地之间共处的智慧,那就是想要收获粮食,一定要提前播种。农耕如此,百业如此,数字化创新也是一样。数字化技术,已经成为全球…

速来!掘金数据时代2022年度隐私计算评选活动火热报名中!

开放隐私计算 开放隐私计算开放隐私计算OpenMPC是国内第一个且影响力最大的隐私计算开放社区。社区秉承开放共享的精神,专注于隐私计算行业的研究与布道。社区致力于隐私计算技术的传播,愿成为中国 “隐私计算最后一公里的服务区”。183篇原创内容公众号…

一月券商金工精选

✦研报目录✦ ✦简述✦ 按发布时间排序 国盛证券 “薪火”量化分析系列研究(二)-票据逾期数据中的选股信息 发布日期:2023-01-04 关键词:股票、票据、票据预期 主要内容:本文深入探讨了“票据持续逾期名单”这一…

CentOS7.6 MySQL8安装

1 检查是否安装过 MySQL rpm -qa | grep -i mysqlmariadb rpm -qa | grep mariadb2 卸载之前的安装 MySQL rpm -e --nodeps 软件名 //强力删除,对相关依赖的文件也进行强力删除卸载 rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_643 官网下载 MySQL :: D…

kettle简单使用-将CSV转换为Excel文件_操作过程---大数据之kettle工作笔记003

做个例子把csv转换为xls文件 可以看到过程 首先右键文件 新建 转换 然后选择核心对象 输入 CSV文件输入 然后选择输出excel输出,拖拽过来 然后按住shift 然后鼠标左键,然后拉出一条线到输出 然后松开的

关于ctf中flask算pin总结

什么是pin码 pin码是flask在开启debug模式下,进行代码调试模式所需的进入密码,需要正确的PIN码才能进入调试模式,可以理解为自带的webshell pin码如何生成 pin码生成要六要素 1.username 在可以任意文件读的条件下读 /etc/passwd进行猜测 2.modname 默…

硬件系统工程师宝典(10)-----了解PI分析目标,电源完整性设计“有章可循”

各位同学大家好,欢迎继续做客电子工程学习圈,今天我们继续来讲这本书,硬件系统工程师宝典。上篇我们说到在电源完整性分析时,如何合理使用去耦电容,知道了对于不同频率的信号噪声采用不同类型的去耦电容。今天我们来看…

【蓦然回首忆Java·基础卷Ⅰ】

文章目录开端通过引用创建对象Java的数据存储方式基本类型包装类和高精度数字操作符自动递增和自动递减老生常谈的问题:和equals()如何重写equals方法?短路字面量科学计数法位运算类型转换初始化和清理方法的重载方法的重写无参构造器this与构造器垃圾收…

51-52 - 进程状态设计

---- 整理自狄泰软件唐佐林老师课程 文章目录1. 问题2. 进程状态设计2.1 任务生命周期2.2 任务的状态2.3 任务的生命周期与状态切换2.4 状态切换概要设计2.4.1 核心数据结构>内核队列2.4.2 KillTask() 实现思路2.4.3 整体实现规划2.4.4 编程实验:任务生命周期状态…

字节跳动DevOps交付流程演进之路

近年来,各企业都已在实践 DevOps 的流程、方法和工具,来提升业务价值交付的效率。不同企业的业务团队背景和基础各不相同,因此都在走自身的 DevOps 之路,往往伴随着成功的经验和失败的教训,了解和学习不同背景下的 Dev…

Qt 某光谱仪程序开发

某光谱仪程序开发 文章目录某光谱仪程序开发摘要安装驱动注册COM组件导出.h和.cpp在Qt 中添加源文件开发打包程序关键字: Demo、 Qt、 COM、 dumpcpp、 C摘要 今天接到一个临时小任务,写一个的项目子模块的Demo,以供和专家们交流一下项目技…

游戏蓝牙耳机什么牌子好?游戏蓝牙耳机性价比品牌

为了提升游戏体验,多数人都会选购一副蓝牙耳机,在网上找了当前热销的蓝牙耳机,终于整理出了当前热销性价比高的蓝牙耳机品牌,今天就带大家一起看看这几款耳机的优点,希望这篇文章能帮助大家选择。 一、南卡小音舱蓝牙…

JavaScript随手笔记---对比数组差异

💌 所属专栏:【JavaScript随手笔记】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &#…

Mybatis源码分析系列之第二篇:Mybatis的数据存储对象

前言:SQLSession是对JDBC的封装 一:SQLSession和JDBC的对照说明 左边是我们的客户端程序,右边是我们的MySQL数据仓,或者叫MySQL实例 Mybatis是对JDBC的封装,将JDBC封装成了一个核心的SQLSession对象 JDBC当中的核心对…

【IoT】做短视频之前,你需要先做好内容定位

现在做内容无疑要从垂直领域入手,否则你就很难出圈。 干货类或者说垂直领域方向的内容,往往都偏向于枯燥,并且会涉及很多专业性的名词,读者理解起来会困难很多,阅读的兴趣也自然会降低。 这也是笔者个人开始做短视频…