java的异常处理机制

Java异常处理机制 在使用计算机语言进行项目开发的过程中,即使程序员把代码写得尽善尽美,在系统的运行过程中仍然会遇到一些问题,因为很多问题不是靠代码能够避免的,比如:客户输入数据的格式,读取文件是否存在,网络是否始终保持通畅等等。程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常(开发过程中的语法错误和逻辑错误不是异常)。Java程序在执行过程中所发生的异常事件可分为两类:Error:Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 关于 Java 中引入的 Checked Exceptions,目前存在着很多反对意见。正方的观点是引入 Checked Exceptions,可以增加程度的鲁棒性。反方的观点是 Checked Exceptions 很少被开发人员正确使用过,并且降低了程序开发的生产率和代码的执行效率。 正方代表 James Gosling http://www.artima.com/intv/solid.html 反方代表 Anders Hejlsberg http://www.artima.com/intv/csdes.html 中文版:http://www.youkuaiyun.com/develop/article/22/22612.shtm 我的一些观点: 第一部分 选择checked or unchecked 这里需要对异常的理解。什么算异常?java的异常处理机制是用来干什么的?异常和错误有什么区别? 异常机制就是java的错误处理机制!java中的异常意味着2点:第一,让错误处理代码更有条理。这使得 正常代码和错误处理代码分离。第二,引入了context的概念,认为有些错误是可以被处理的。问题就出在这儿了。 java的checked异常指的就是在当前context不能被处理的错误! 这句话其实是对上面2点的总结。首先checked异常是一种错误,其次这种错误可以被处理(或修复)。 checked异常就是可以被处理(修复)的错误,unchecked异常其实就是无法处理(修复)的错误。 说到这儿,应该清楚了。别的语言没有checked异常,就是说它们认为错误都无法被修复,至少在语言级 不提供错误修复的支持。java的catch clause干的就是错误修复的事。 我的理解是,用好java的异常,其实就是搞清楚什么时候该用checked异常。应该把unchecked异常当作 缺省行为。unchecked异常的意思是:当我做这件事时,不可思议的情况发生了,我没办法正常工作下去! 然后抛出一个unchecked异常,程序挂起。而checked异常的意思是:当我做这件事时,有意外情况发生, 可以肯定的是,活是没法干了,但是要不要挂起程序,我这个函数没法做主,我只能汇报上级! 其实,从上面的分析可以看出,java引入checked异常只是让程序员多了一个选择,它并不强迫你使用checked异常。 如果你对什么时候应该使用checked异常感到迷惑,那么最简单的办法就是,不要使用checked异常!这里包括2个 方面: 第一,你自己不必创建新的异常类,也不必在你的代码中抛出checked异常,错误发生后只管抛出unchecked异常; 第二,对已有API的checked异常统统catch后转为unchecked异常! 使用unchecked异常是最省事的办法。用这种方法也可以享受“正常代码和错误处理代码分离”的好处。因为我们在调用方法时, 不用根据其返回值判断是否有错误出现,只管调用,只管做正事就ok了。如果出现错误,程序自然会知道并挂起。这样的效果是怎样 的呢? 第一,我们的业务代码很清晰,基本都是在处理业务问题,而没有一大堆判断是否有错的冗余代码。(想想看,如果没有 throw异常的机制,你只能通过函数的返回值来判断错误,那么你在每个调用函数的地方都会有判断代码!) 第二,我们的代码假设一切正常,如果确实如此,那么它工作良好。但是一旦出现任何错误,程序就会挂起停止运行。当然,你可以查看 日志找到错误信息。 那么使用checked异常又是怎样的呢? 第一,你需要考虑更多的问题。首先在设计上就会更加复杂,其次就是代码更加冗长。设计上复杂 体现在以下方面: 1 对异常(错误)的抽象和理解。你得知道什么情况才能算checked异常,使得上级确实能够处理(修复)这种异常,并且让整个程序 从这种设计中确实得到好处。 2 对整个自定义checked异常继承体系的设计。正如那篇文章所说,总不能在一个方法后面抛出20个异常吧!设计自定义checked异常, 就要考虑方法签名问题,在合适的时候抛出合适的异常(不能一味的抛出最具体的异常,也不能一味抛出最抽象的异常) 第二,业务代码相比较使用unchecked的情况而言,不够直接了当了。引入了throws签名和catch clause,代码里有很多catch,方法 签名也和异常绑定了。 第三,有了更强的错误处理能力。如果发生了checked异常,我们有能力处理(修复)它。表现在不是任何错误都会导致程序挂起,出现了 checked异常,程序可能照样运行。整个程序更加健壮,而代价就是前面2条。 第二部分 使用checked异常的最佳实践 现在假设有些错误我们确定为checked异常,那么我们针对这些checked异常要怎样编码才合理呢? 1 不要用checked异常做流程控制。无论如何,checked异常也是一种错误。只是我们可以处理(修复)它而已。这种错误和普通业务 流程还是有区别的,而且从效率上来说,用异常控制业务流程是不划算的。其实这个问题有时候很难界定,因为checked异常“可以修复”, 那么就是说修复后程序照常运行,这样一来真的容易跟普通业务流程混淆不清。比如注册用户时用户名已经存在的问题。这个时候我们要考虑, 为什么要用checked异常?这和使用业务流程相比,给我带来了什么好处?(注意checked异常可以修复,这是和unchecked异常本质的区别) 照我的理解,checked异常应该是介于正常业务流程和unchecked异常(严重错误)之间的一种比较严重的错误。出现了这种错误,程序无法 完成正常的功能是肯定的了,但我们可以通过其他方式弥补(甚至修复),总之不会让程序挂起就是。其实这一点也是设计checked异常时要考虑 的问题,也是代价之一吧。 2 对checked异常的封装。这里面包括2个问题: 第一,如果要创建新的checked异常,尽量包含多一点信息,如果只是一条message,那么用Exception好了。当然,用Exception会 失去异常的型别信息,让客户端无法判断具体型别,从而无法针对特定异常进行处理。 第二,不要让你要抛出的checked exception升级到较高的层次。例如,不要让SQLException延伸到业务层。这样可以避免方法 签名后有太多的throws。在业务层将持久层的所有异常统统归为业务层自定义的一种异常。 3 客户端调用含有throws的方法要注意: 第一,不要忽略异常。既然是checked异常,catch clause里理应做些有用的事情——修复它!catch里为空白或者仅仅打印出错信息都是 不妥的!为空白就是假装不知道甚至瞒天过海,但是,出来混迟早要还的,迟早会报unchecked异常并程序挂起!非典就是个例子。 打印出错信息也好不到哪里去,和空白相比除了多几行信息没啥区别。如果checked异常都被这么用,那真的不如当初都改成unchecked好了, 大家都省事! 第二,不要捕获顶层的Exception。你这么干,就是在犯罪!因为unchecked异常也是一种Exception!你把所有异常都捕获了——不是我 不相信你的能力,你根本就不知道该如何处理!这样做的直接的后果就是,你的程序一般来说是不会挂起了,但是出现错误的时候功能废了, 表面上却看不出什么!当然,深究起来,这也不是什么罪大恶极,如果你在catch里打印了信息,这和上面那条的情况是差不多的。而这2条 的共同点就是,没有正确使用checked异常!费了那么大劲设计的checked异常就是给你们上级(客户端)用的,结果你们不会用!真的 不如用unchecked干脆利落了!
Java中的异常处理机制是什么? 异常处理是一种编程技术,用于检测和处理程序运行期间发生的错误。在Java中,异常处理机制主要包括异常的抛出、捕获、处理和传递等环节。通过适当的异常处理,可以提高程序的健壮性,确保在遇到错误时程序能够优雅地恢复或终止。除了使用Java内置的异常类外,还可以根据需要定义自定义异常类,以更精确地描述程序中发生的错误。37 }811 }12}1316 try {21 }22 }23}Java中的异常处理机制是确保程序健壮性和用户友好的重要工具。 阅读详情

相关推荐

为何LPDDR4支持on-die ECC,但是DDR4却不支持呢?

DRAM的ECC,目前的编码方式都是128bit data,产生8bit parity或者ECC code. 而且必须要128bit才行。这8bit的ECC code是要被写入到DRAM内存里面的,从而read的时候,可以读取这8bit ECC code来判定read data是否有错,如果是SBF,就可以纠错了,如果是double bit,大部分时候是可以detect到错误,即所谓的SEC(Single Error Correct) + DED(Double Error Detect).

一个DRAM从业者的告白 1557

java中exception作用,最近才领悟到exception在开发中的好处,不知是否理解有误

例如,一个用户注册流程:我们要根据用户的输入来返回给用户不同的结果;“用户名格式错误”“密码格式错误”“邮箱格式不正确”我不知道大家平时是怎么做的,我做这样的事情有两种处理方法:1.有几个检测属性就写几个检测方法,然后在一个主控制类里做处理if(Checker.invalidUserName)return Constant.INVALID_USER_NAME;if(Checker.invalidE...

weixin_30577815的博客 295

扣子工作流实战演练

例如,你可以在代码节点的输入中引用大模型节点的输出,这样代码节点就可以使用大模型节点的输出。扣子的工作流节点并不是固定的,而是由一系列可以任意添加的节点组成的,每个节点都有其特定的功能和用途。扣子工作流中常见的节点类型如图4-2所示。在图像生成节点中设置模型为人像,输入参数名为input,变量值引用开始节点的renwu,正向提示词为{{input}},如图4-19所示。然后添加两个节点,选择“图像生成”和“画板”,将“开始”节点、“图像生成”节点、“画板”节点、“结束”节点依次串联,如图4-17所示。

夏天又到了的专栏 1587

java异常—检查异常(checked exception)和未检查异常(unchecked exception)

可以看出异常的家族势力庞大,通常我们说的异常是包括exception和error。 Exception家族我们恐怕见的不少,但是error家族我们可能就没什么印象了,下面我来说说这两个类的区别: Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题。大多数的错误与代码编写者执行的操作无关,而是表示代码运行时 JVM(Java 虚拟机)出现的问题。例如,Java虚拟机运行错误(Virtual MachineError),当 JVM 不再有继续执行操作所需的内存资源时,将出现 OutOfMe.

m0_37135879的博客 1万+

基于FPGA的PCIe核系列:FPGA root模式生成工程例子分析(1)

一、 PCIE系统架构 1.1 PCIE分层结构 PCIE结构 1.2 TLP包 四种TLP类型。 Memory (内存空间操作) IO (IO空间操作) Configuration (配置操作) Message (信息操作) 四种类型TLP,如果有需要响应,称为Non-Posted TLP,如果没有需要响应,称为Posted TLP。 TLP包类型 1.2.1 TLP结构 TLP数据格式 1.2.2 Header各个字段的含义 Header格式 ...

huangshanhu的博客 3436

10.2 构网型变流器引发的次同步振荡与宽频振荡问题:机理分析与抑制技术

随着构网型变流器在新型电力系统中的规模化部署,其作为电压源主动支撑电网的能力得到验证的同时,也引发了一系列前所未有的稳定性问题。传统的同步发电机主导的电力系统中,振荡模式主要集中于**低频区间**。然而,构网型变流器通过快速数字控制实现的虚拟同步、惯性响应等先进功能,其控制环路动态与电网阻抗、其他电力电子设备之间产生了复杂的交互作用。这种交互不仅可能诱发经典的**次同步振荡**,更可能催生频率范围从数赫兹到数百赫兹甚至上千赫兹的**宽频振荡**。

技术工作者 1315

Checked和Unchecked Exceptions -- Java

在我们所从事的许多项目中,我们看到了各种不同的编码,代码格式,类的命名方式,数据库技术等等不同策略。但所有项目中相同的一件事是异常(Exception),它有很多种,而且我们还可能通过继承Exception类创建自定义异常。 在这篇文章中,我将讨论异常。我将讨论已检查异常(checked exceptions)和未检查异常(unchecked exceptions)。我将谈论什么是异常,以及异常处理的最佳实践。 本文中的章节: 什么是异常 checked 和 unchecked exceptions 最佳

bill的博客 704

避坑指南:英飞凌TC3XX的MCMCAN初始化常见错误及解决方法

本文针对英飞凌TC3XX系列MCU的MCMCAN模块初始化难题,深入剖析了寄存器配置时序、总线监控模式误用、中断映射错误及Message RAM地址冲突四大常见陷阱。通过实战代码示例和诊断流程,提供了清晰的避坑指南和解决方案,帮助嵌入式开发者高效解决CAN FD通信故障,确保汽车电子与工业控制项目的稳定运行。

weixin_29193259的博客 246

检查异常 (Checked Exceptions) 和非检查异常 (Unchecked Exceptions)的区别?

非检查异常 (Unchecked Exceptions)【运行时异常】,检查异常【非运行时异常】

m0_51577196的博客 1015

计算机模拟爆破过程,基于LSDYNA岩石爆破模拟建模分析

原标题:基于LSDYNA岩石爆破模拟建模分析 Ls Dyna岩石爆破模拟仿真作者:dyna_focus擅长领域:dyna/abaqus/hypermesh一、 数值模型的建立1.1 单元及算法的选择岩石,炸药,空气都采用solid164实体单元。岩石采用常应力实体单元,该种单元属于纯粹的lagrange算法,该种算法单元网格附着在材料上,随着材料的流动而产生单元网格的变形,但是在结构变形巨大时,有...

weixin_29494379的博客 7317

【实验】ENSP 实战:酒店有线 + 无线三层组网全配置(VLAN 规划 + AC/AP+SSID 绑定)

三层架构:出口路由器 → 核心交换机 → 汇聚交换机 → 接入交换机 / AP / 终端。

jundao1997的专栏 431

Java 异常处理机制详解

在 Java 编程中,异常处理是一个至关重要的概念。它帮助我们处理程序执行过程中可能出现的错误或异常情况,从而提高程序的可靠性和稳定性。本文将详细介绍 Java 异常处理机制,包括异常的定义、分类、处理方式以及一些最佳实践。

专注Java和MySQL领域知识分享 1991

智慧安防:基于Java+YOLOv8的视频AI识别平台设计与实现

张工,我们的园区智慧安防项目又出问题了!用Python写的YOLOv8 demo,拉3路RTSP流就卡,视频延迟超过5秒,入侵检测误报率太高,一到晚上光线差就全是误报,而且和我们的Java安防平台对接太麻烦,还要搭个消息队列,架构复杂得要死!“别慌,用Java+YOLOv8啊!

2601_94871597的博客 196

【java异常处理机制】

在当前方法(本案例就是main方法)上继续使用throws声明该异常的抛出给调用者解决。具体选取那种取决于异常处理的责任问题。当我们调用一个含有throws声明异常抛出的方法时,编译器要求我们必须处理这个异常,否则编译不通过。自定义异常通常用来定义那些业务上的异常问题。使用try-catch捕获并处理这个异常。throw用来对外主动抛出一个异常。提供超类异常提供的所有种类构造器。需要是Exception的子类。异常的类名要做到见名知义。

qq_36028783的博客 464

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

java异常处理机制

程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常,那么异常发生之后怎么办,Java提供了更加优秀的解决办法-**异常处理机制**。异常处理机制能让程序在异常发生时,按照代码的预先设定的异常处理逻辑,针对性地处理异常,让程序尽最大可能恢复正常并继续执行,且保持代码的清晰。

蜕变的快乐 771

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Java中的异常处理机制

Java中的异常处理不仅限于简单的错误报告,还包括了对异常情况的捕获、处理以及必要的资源清理。然而,也需要注意避免过度使用异常处理,因为它可能会对程序的性能产生负面影响,并掩盖潜在的逻辑错误。是Java中处理异常的一种强大机制,它允许开发者编写健壮的代码,能够优雅地处理异常情况,并确保资源得到正确释放。这些异常在编译时不需要被显式地处理,但开发者可以选择捕获并处理它们,以提高程序的健壮性。是Java中处理异常的基本结构,它们共同工作以确保异常能够被妥善处理,并且必要的资源能够被正确释放。

hong161688的博客 1222

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

java中异常处理机制事件机制_Java异常处理机制

Java程序在运行期间,可能会发生不可被期望的事件,它会阻止程序按照程序员的预期正常执行,这就是异常。异常发生时,我们不应该让程序自生自灭,把输出的错误信息返回给用户,因此我们需要对异常进行处理,Java有着非常优秀的异常处理机制。直接上Java异常类之间的结构图,一目了然的看明白很多问题。1、Throwable类是Java异常类型的顶层父类,一个对象只能是Throwable类(或者子类)的实例,...

weixin_42389421的博客 425

Java 中的异常处理机制

Java的异常处理机制可以让程序具有极好的容错性,让程序更加健壮。当程序运行出现意外情形时,系统会自动生成一个Exception对象来通知程序,从而实现将“业务功能实现代码” 和 “错误处理代码” 分离,提供更好的可读性。

KevinChen2019的博客 6965

java的异常处理机制详解

Java异常的处理主要依赖于try,catch,finally,throws,throw这五个关键字。下面分别介绍它们:

jingwen的博客 1万+

Java 中的异常处理机制详解

异常是程序执行期间发生的问题,它中断了程序的正常流程。异常可以由多种原因引起,比如除数为零、数组越界访问、文件找不到等。在 Java 中,所有异常都是从Throwable类派生出来的。Java 的异常处理机制是一个强大的工具,它可以帮助我们编写更加健壮和可维护的代码。正确理解和运用异常处理,不仅能够提高程序的稳定性,还能简化调试过程。希望这篇文章能够为读者提供有价值的指导,帮助大家在日常开发中有效地管理和应对异常情况。

m0_56896669的博客 1241

【JAVA 异常处理机制】

在Java编程中,异常处理是一种重要的机制,用于处理程序运行时可能出现的错误和异常情况。异常处理机制可以帮助开发者优雅地处理异常,提高程序的健壮性和可靠性。提示:以下是本篇文章正文内容,下面案例可供参考自定义异常通常用来定义那些业务上的异常问题异常的类名要做到见名知义需要是Exception的子类提供超类异常提供的所有种类构造器例/*** 非法的年龄异常* 自定义异常通常用来说明业务上的错误.* 自定义异常要注意以下问题:* 1:定义的类名要做到见名知义。

南 阳 的博客 761
上一篇: Java支持者BEA放眼替代语言 处初步阶段
下一篇: Oracle9i PL/SQL编程的经验小结
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值