Java的异常与错误

对比 Exception 和 Error,另外,运行时异常与一般异常有什么区别?
Exception 和 Error 都是继承了 Throwable 类,在 Java 中只有 Throwable 类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型。

Exception 和 Error 体现了 Java 平台设计者对不同异常情况的分类。Exception 是程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应处理。

不检查异常就是所谓的运行时异常,类似 NullPointerException、ArrayIndexOutOfBoundsException 之类,通常是可以编码避免的逻辑错误,具体根据需要来判断是否需要捕获,并不会在编译期强制要求。

其中有些子类型,最好重点理解一下,比如 NoClassDefFoundErrorClassNotFoundException 有什么区别

ClassNotFoundException 表示在编译时存在对某个类的引用,但在运行时无法找到该类。通常,这是因为类路径中缺少了必需的 JAR 文件或类文件,或者由于类名拼写错误、包名错误等问题而导致无法找到该类。与 NoClassDefFoundError 不同,ClassNotFoundException 表示编译时存在对该类的引用,但在运行时无法找到。
简而言之,NoClassDefFoundError 表示类存在但是无法加载,ClassNotFoundException 表示类不存在。在解决这两种异常时,需要检查类路径、JAR 文件以及类名和包名是否正确,并确保所有必需的类都在正确的位置上。

先开看第一个吧,下面的代码反映了异常处理中哪些不当之处?
在这里插入图片描述

这段代码虽然很短,但是已经违反了异常处理的两个基本原则。第一,尽量不要捕获类似 Exception 这样的通用异常,而是应该捕获特定异常,在这里是 Thread.sleep() 抛出的 InterruptedException。

这是因为在日常的开发和合作中,我们读代码的机会往往超过写代码,软件工程是门协作的艺术,所以我们有义务让自己的代码能够直观地体现出尽量多的信息,而泛泛的 Exception 之类,恰恰隐藏了我们的目的。另外,我们也要保证程序不会捕获到我们不希望捕获的异常。比如,你可能更希望 RuntimeException 被扩散出来,而不是被捕获。

如果我们不把异常抛出来,或者也没有输出到日志(Logger)之类,程序可能在后续代码以不可控的方式结束。没人能够轻易判断究竟是哪里抛出了异常,以及是什么原因产生了异常。

在这里插入图片描述

这段代码作为一段实验代码,它是没有任何问题的,但是在产品代码中,通常都不允许这样处理。你先思考一下这是为什么呢?我们先来看看printStackTrace()的文档,开头就是“Prints this throwable and its backtrace to the standard error stream”。问题就在这里,在稍微复杂一点的生产系统中,标准出错(STERR)不是个合适的输出选项,因为你很难判断出到底输出到哪里去了。

尤其是对于分布式系统,如果发生异常,但是无法找到堆栈轨迹(stacktrace),这纯属是为诊断设置障碍。所以,最好使用产品日志,详细地输出到日志系统里。

我们从性能角度来审视一下 Java 的异常处理机制,这里有两个可能会相对昂贵的地方:try-catch 代码段会产生额外的性能开销,或者换个角度说,它往往会影响 JVM 对代码进行优化,所以建议仅捕获有必要的代码段尽量不要一个大的 try 包住整段的代码;与此同时,利用异常控制代码流程,也不是一个好主意,远比我们通常意义上的条件语句(if/else、switch)要低效。Java 每实例化一个 Exception,都会对当时的栈进行快照,这是一个相对比较的操作。如果发生的非常频繁,这个开销可就不能被忽略了。
也就是说: try catch 的频繁使用确实是会影响性能的。

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

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

相关文章

渗透测试工具ZAP入门教程(1)-安装和快速开始

介绍 ZAP Zed Attack Proxy(ZAP)是一个免费的开源渗透测试工具,在 软件安全项目 (SSP)。ZAP 专为测试 Web 应用程序而设计,既灵活又可扩展。 ZAP的核心是所谓的“中间人代理”。它位于测试人员的浏览器和…

叁腾科技更新招股书:营收、净利双降,创始人鲁永祥有股权被冻结

日前,上海叁腾科技有限公司(Sentage Holdings Inc.,下称“叁腾科技”)向美国证券交易委员会(SEC)递交了更新后的招股书。招股书显示,叁腾科技拟在纳斯达克上市。 根据招股书,叁腾科…

任意系统升Windows10(microsoft官网)

打开https://www.microsoft.com/zh-cn/software-download/windows10 点击“立即下载工具” 下载好后点击“保留” 单击“MediaCreationTool20H2.exe”

竞逐新能源汽车续航,背靠广汽的巨湾技研能否打好“技术牌”?

续航、安全性能包括充电速度一直都是新能源汽车行业发展掣肘。 2020年以来,国内外主力电动乘用车续航普遍突破600公里,消费者续航焦虑逐步化解,但随之而来的是,需求侧对充电便捷性的考量,能否像传统车加油一样实现快速…

GD32E230C8T6_OTA升级

GD32E230C8T6_OTA升级 运行环境简介程序的起始地址进行分区总体流程图Bootloader 程序Bootloader 编译设置APP 分区部分APP 编译设置重点步骤 运行环境 1.Windows10 2. Keil5(MDK5) Version 5.27.0.0 3. MCU GD32E230C8T6 简介 本例程主要分析在线升级(OTA)的实现过程, 主要…

个人配置电脑清单 (windows+黑苹果)

自配第一套,3A游戏入门套 AMD锐龙 R5 3500X盒装微星B450 迫击炮 Max主板套装 1218元 酷兽DDR4 8G 3200MHz内存条 2条 301元 耕升1660 super 6g 炫光 1487元 爱国者极光风扇 4个 110元 航嘉 金牌500W WD500K电源 265元 先马(SAMA)鲁班1 机箱 179元 …

耕升 GeForce RTX 4070 星极皓月 OC给玩家带来DLSS3+2K光追百帧游戏体验

在2023年4月12日晚上21:00,耕升 GeForce RTX 4070 系列全系显卡正式解禁。作为NVIDIA 核心AIC合作伙伴之一的耕升,也紧跟步伐推出全新耕升 GeForce RTX 4070 星极皓月 OC 和 耕升 GeForce RTX 4070 星极幻姬 OC。其建议零售价为人民币5199元。耕升 GeForce RTX 4070…

耕升 GeForce RTX 4060 Ti 系列,为玩家带来DLSS3+1080P光追游戏体验!

NVIDIA 于2023年5月18日,正式发布GeForce RTX 4060 Ti系列,作为核心AIC厂商的一员,耕升此次也为玩家带来了多款耕升 GeForce RTX 40系列全新家族成员。其中囊括耕升 GeForce RTX 4060 Ti 追风 EX3和耕升 GeForce RTX 4060 Ti 追风&#xff0c…

shell脚本耕升(一)

文章目录 文件描述符自定义文件描述符数组和关联数组定义关联数组 别名获取终端信息获取,设置日期与延时延时 调试脚本函数与参数递归函数导出函数 读取命令序列输出不按回车键的方式读取字符“n”字段分隔符与迭代器for循环命令使用cat 查看script,scri…

高精度地图定位在高速公路自动驾驶系统中的应用

近年来随着汽车保有量不断增加,随之而来的是: ( 1) 严重的交通拥堵,通行效率低下,用在通行上的时间不断增加; ( 2) 交通事故频发,交通事故导致的伤亡人数和费用不断增加,而且绝大多数事故是由人为因素导致的; ( 3) 大气…

Kubernetes对象深入学习之五:TypeMeta无效之谜

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是《Kubernetes对象深入学习之五》系列的第五篇,从前文的分析也能看出,代表对象类型的schema.ObjectKind,于…

WindowBuilder的安装

偶然间发现利用Eclipse原来也可以通过Java Swing像VB一样以拖拽的形式布局控件。 那就是在Eclipse中安装Window Builder插件。 1、在Eclipse中Help——Install New Software——在Work with中输入WindowBuilder的链接 WindowBuilder的链接:WindowBuilder | Downlo…

android获取当前windows,Android 中的 Window

一台 Android 手机屏幕上显示的内容就是由一个个 Window 组合而成的。顶部的状态栏是一个 Window,底部的导航栏也是一个 Window,中间自己的应用显示区域也是一块大 Window,Toast、Dialog 也都对应一个自己的 Window。而 Android 中对这些 Window 的管理是通过 一个框架的服务…

Flink Window机制详解

Flink 认为 Batch 是 Streaming 的一个特例,所以 Flink 底层引擎是一个流式引擎,在上面实现了流处理和批处理。而窗口(window)就是从 Streaming 到 Batch 的一个桥梁。Flink 提供了非常完善的窗口机制,这是我认为的 Fl…

window7下利用DockerToolbox安装Docker

这几天终于放假,有空在家深造下后端的知识。在通过某位大神的博客中深入学习redis时,知道了redis在window中的版本其实是阉割版(既非官方版)的,也就意味着很多功能没有,这对于以后的开发中可能造成隐患。当…

Window.innerHeight

Window.innerHeight 接口的只读innerHeight属性 Window返回窗口的内部高度(以像素为单位),包括水平滚动条的高度(如果存在)。值innerHeight取自窗口 布局视口的高度。可以使用该 innerWidth属性获得宽度。一个整数值&a…

window7 正式中文零售版(10.22版) 32位已提供下载,64位待更新

window7ULTIMATE 正式中文零售版(10.22版) 32(上传时间:2009-10-21 04:18:54) fs2you://Y2FjaGVmaWxlMzQucmF5ZmlsZS5jb20vemgtY24vZG93bmxvYWQvM2JlNzVkZjUzZTBjZmIzOTA1YWYwYjRmNDQ3MWM5ZjMvY25fd2luZG93c183X3VsdGl…

计算机Windows7③

一、操作系统 1.1操作系统的概念 操作系统可以控制和管理计算机的硬件和软件资源、控制程序执行、改善人机界面、合理组织计算机工作流程并为用户提供计算机运行环境的系统软件。 操作系统是人机接口,如果没有操作系统,则不能使用计算机,是裸…

STM32 Cubemx 同名外设中断及回调

文章目录 前言示例工程个人理解 前言 最近在学习STM32,采用HAL库开发方式。记录一下同名外设中断及回调。 这里提及的同名外设指USART1/2之类的相同外设,但不是同一个instance。 示例工程 以使用cubemx配置两个同名外设EXTI0/EXT4为例。 在NVIC配置…

Java语言程序设计 例题5.4(英里和公里的转化)

5.4 (Conversion from miles to kilometers) Write a program that displays the following table (note that 1 mile is 1.609 kilometers): Miles Kilometers 1 1.609 2 3.218 ... 9 14.481 10 16.090 5.4(英里和公里的转化)写一个程序显示下表&#x…