Java异常处理和设计

  • 时间:
  • 浏览:2

在程序运行设计中,进行异常外理是非常关键和重要的一每项。有4个 程序运行的异常外理框架的好坏直接影响到整个项目的代码质量以及后期维护成本和难度。试想一下,可能有4个 项目从头到尾不还能不能考虑过异常外理,当程序运行出错从哪里寻找出错的根源?

或者在catch块中进行捕获。

2)一般会用于程序运行老是出显你这人 逻辑时程序运行员主动抛出你这人 特定类型的异常。throw只会老是出显在方式体中,当方式在执行过程中遇到异常情况表时,将异常信息封装为异常对象,或者throw出去。throw关键字的有4个 非常重要的作用什么都有有 异常类型的转换(会在上端阐述道)。

Java中如可外理异常

8. 在finally中释放资源

过多说把上层类的异常放上最前面的catch块。比如下面这段代码:

以下是本文的目录大纲:

也什么都有有在Java中进行异常外理励志的话 ,对于可能会指在异常的代码,都需要选则你这人 方式来进行异常外理:

二.Java中如可外理异常

或者可能有4个 项目异常外理设计地过多 ,又会严重影响到代码质量以及程序运行的性能。或者,如可高效简洁地设计异常外理是一门艺术,本文下面先讲述Java异常机制最基础的知识,或者给出在进行Java异常外理设计时的有十几个 建议。

1)throws老是出显在方式的声明中,表示该方式可能会抛出的异常,或者交给上层调用它的方式程序运行外理,允许throws上端跟着多个异常类型;

5.过多说将提供给用户看的信息放上异常信息里

谨慎地使用异常,异常捕获的代价非常高昂,异常使用过多 会严重影响程序运行的性能。可能在程序运行中才能用if励志的话 和Boolean变量来进行逻辑判断,不还能不能尽量减少异常的使用,从而外理过多说要的异常捕获和外理。比如下面这段经典的程序运行:

可能声明抛出的异常是非运行时异常,此方式的调用者需要显示地用try..catch块进行捕获可能继续向上层抛出异常。

在使用try..catch..finally块的完后 ,注意千万过多说在finally块中使用return,可能finally中的return会覆盖已有的返回值。下面看有4个 例子:

7. 异常外理尽量放上高层进行

可能你想学习Java都需要来你这人 Q群,首先是220,上端是142,最后是906,上端都需要学习和交流,后要资料都需要下载。

Exception,也什么都有有我们都我们都老是见到的许多异常情况表,比如NullPointerException、IndexOutOfBoundsException,那此异常是我们都我们都都需要外理的异常。

那此是异常

throws表示老是出显异常的你这人 可能,过多说后要指在那此异常;throw则是抛出了异常,执行throw则一定抛出了你这人 异常对象。两者后要消极外理异常的方式(这里的消极并后要说你这人 方式不好),什么都有有抛出可能可能抛出异常,或者过多由方式去外理异常,真正的外理异常由此方式的上层调用外理。

当然catch块都需要有多个,注意try块不还能不能有有4个 ,finally块是可选的(或者最多不还能不能有有4个 finally块)。

unchecked exception(非检查异常),也称运行时异常(RuntimeException),比如常见的NullPointerException、IndexOutOfBoundsException。对于运行时异常,java编译器过多说求需要进行异常捕获外理可能抛出声明,由程序运行员自行决定。

典型的非RuntimeException包括IOException、SQLException等。

可能声明抛出的异常是运行时异常,此方式的调用者都需要选则地进行异常捕获外理。

比如使用空的引用、数组下标越界、内存溢出错误等,那此后要意外的情况表,背离我们都我们都程序运行你这人 的意图。错误在我们都我们都编写程序运行的过程中会老是指在,包括编译期间和运行期间的错误,在编译期间老是出显的错误有编译器帮助我们都我们都同時 修正,然而运行期间的错误便后要编译器力所能及了,或者运行期间的错误往往是难以预料的。

3、在代码块用throw手动抛出有4个 异常对象,此时后要你这人 情况表,跟2)中的例如:

被try块包围的代码说明这段代码可能会指在异常,一旦指在异常,异常便会被catch捕获到,或者需要在catch块中进行异常外理。

4.注意catch块的顺序

尽量将异常统一抛给上层调用者,由上层调用者统一之时如可进行外理。可能在每个老是出显异常的地方都直接进行外理,会原因 程序运行异常外理流程混乱,不有益于后期维护和异常错误排查。由上层统一进行外理会使得整个程序运行的流程清晰易懂。

下面我们都我们都来看一下异常机制中十个 关键字的用法以及需要注意的地方。

2.throws和thow关键字

比如下面这段代码:

从你这人 例子说明,无论try块可能catch块所含无所含return励志的话 ,后要执行finally块。

1.只在必要使用异常的地方才使用异常,过多说用异常去控制程序运行的流程

2)可能父类的方式声明有4个 异常exception1,则子类在重写该方式的完后 声明的异常不还能不能是exception1的父类;

当然还都需要采用throw关键字手动来抛出异常对象。下面看有4个 例子:

一.那此是异常

  本小节讨论子类重写父类方式的完后 ,如可选则异常抛出声明的类型。下面是三点原则:

在Java中异常被当做对象来外理,根类是java.lang.Throwable类,在Java中定义了什么都有有异常类(如OutOfMemoryError、NullPointerException、IndexOutOfBoundsException等),那此异常类分为两大类:Error和Exception。

检查异常原因 了过多 的try…catch代码,可能有什么都有有检查异常对开发人员来说是无法合理地进行外理的,比如SQLException,而开发人员却不得不去进行try…catch,原先就会原因 老是老是出显原先你这人 情况表:逻辑代码不还能不能很少的几行,而进行异常捕获和外理的代码却有什么都有有行。原先不仅原因 逻辑代码阅读起来晦涩难懂,或者降低了程序运行的性能。

3)可能父类的方式声明的异常类型不还能不能非运行时异常(运行时异常),则子类在重写该方式的完后 声明的异常要是还能不能有非运行时异常(运行时异常),不还能不能所含运行时异常(非运行时异常)。

在Java中,所有异常类的父类是Throwable类,Error类是error类型异常的父类,Exception类是exception类型异常的父类,RuntimeException类是所有运行时异常的父类,RuntimeException以外的或者继承Exception的类是非运行时异常。

深刻理解try,catch,finally,throws,throw十个 关键字

在类继承的完后 ,方式覆盖时如可进行异常抛出声明

展示给用户错误提示信息最好过多说跟程序运行混淆同時 ,比较好的方式是将所有错误提示信息放上有4个 配置文件中统一管理。

在捕获了异常完后 那此后要做,共要忽略了你这人 异常。千万过多说使用空的catch块,空的catch块原因 你在程序运行中隐藏了错误和异常,或者很可能原因 程序运行老是出显不可控的执行结果。可能你非常肯定捕获到的异常过多以任何方式对程序运行造成影响,最好用Log日志将该异常进行记录,以便刚刚方便更新和维护。

checked exception(检查异常),也称非运行时异常(运行时异常以外的异常什么都有有非运行时异常),java编译器强制程序运行员需要进行捕获外理,比如常见的IOExeption和SQLException。对于非运行时异常可能不进行捕获可能抛出声明外理,编译后要会通过。

一旦你决定抛出异常,你就要决定抛出那此异常。这上端的主要问题什么都有有抛出检查异常还是非检查异常。

这是你这人 外理异常的方式。在Java中还提供了另你这人 异常外理方式即抛出异常,顾名思义,也什么都有有说一旦指在异常,我把你这人 异常抛出去,让调用者去进行外理,许多人不进行具体的外理,此需要要用到throw和throws关键字。

在Java中可能需要外理异常,需要先对异常进行捕获,或者再对异常情况表进行外理。如可对可能指在异常的代码进行异常捕获和外理呢?使用try和catch关键字即可,如下面一段代码所示:

异常外理和设计的有十几个 建议

Exception类的异常包括checked exception和unchecked exception(unchecked exception也称运行时异常RuntimeException,当然这里的运行时异常并后要前面我所说的运行期间的异常,什么都有有Java中用运行时异常你这人 术语来表示,Exception类的异常后要在运行期间指在的)。

1、对代码块用try..catch进行异常捕获外理;

Error是无法外理的异常,比如OutOfMemoryError,一般指在你这人 异常,JVM会选则终止程序运行。或者我们都我们都编写程序运行时需要关心例如异常。

当然可能不还能不能指在异常,则catch块过多执行。或者finally块无论在那此情况表下后要会执行的(这点要非常注意,或者每项情况表下,后要将释放资源的操作放上finally块中进行)。

或者,在一般情况表下,随便说说尽量将检查异常转变为非检查异常交给上层外理。

try...catch...; try....finally......; try....catch...finally...

五.异常外理和设计的有十几个 建议

假如程序运行在运行期间老是出显了错误,可能置之不理,程序运行便会终止或直接原因 系统崩溃,显然这后要我们都我们都希望看到的结果。或者,如可对运行期间老是出显的错误进行外理和外理呢?Java提供了异常机制来进行外理,通过异常机制来外理程序运行运行期间老是出显的错误。通过异常机制,我们都我们都都需要更好地提升程序运行的健壮性。

1)父类的方式不还能不能声明异常,子类在重写该方式的完后 不还能不能声明异常;

下面看有4个 示例:

可能抛出的异常对象是运行时异常,此方式的调用者都需要选则地进行异常捕获外理。

异常的英文单词是exception,字面翻译什么都有有“意外、例外”的意思,也什么都有有非正常情况表。事实上,异常本质上是程序运行上的错误,包括程序运行逻辑错误和系统错误。

四.在类继承的完后 ,方式覆盖时如可进行异常抛出声明

这段代码和上端一段代码的区别是,在实际的createFile方式中并不还能不能捕获异常,什么都有有用throws关键字声明抛出异常,即告知你这人 方式的调用者此方式可能会抛出IOException。不还能不能在main方式中调用createFile方式的完后 ,采用try...catch块进行了异常捕获外理。

2、在该代码的方式体外用throws进行抛出声明,告知此方式的调用者这段代码可能会老是出显那此异常,你需要谨慎外理。此时有你这人 情况表:

可能将你这人 程序运行稍微修改一下,将finally块中的return励志的话 注释加进,运行结果是:

1.try,catch,finally

或者可能方式有返回值,切忌过多说再finally中使用return,原先会使得程序运行组织结构变得混乱。

典型的RuntimeException包括NullPointerException、IndexOutOfBoundsException、IllegalArgumentException等。

可能你想学习Java都需要来你这人 Q群,首先是220,上端是142,最后是906,上端都需要学习和交流,后要资料都需要下载。

try关键字用来包围可能会老是出显异常的逻辑代码,它单独无法使用,需要配合catch可能finally使用。Java编译器允许的组合使用形式不还能不能以下你这人 形式:

这段程序运行的输出结果为:

只在异常最开始英文指在的地方进行日志信息记录。什么都有有情况表下异常后要层层向上跑出的,可能在每次向上抛出的完后 ,都Log到日志系统中,则会原因 无从查找异常指在的根源。

6.外理多次在日志信息中记录同有4个 异常

我许多人建议尽量外理检查异常的使用,可能随便说说该异常情况表的老是出显很普遍,需要提醒调用者注意外理励志的话 ,就使用检查异常;或者使用非检查异常。

有4个 块执行的顺序为try—>catch—>finally。

以下是根据前人总结的许多异常外理的建议:

可能有使用文件读取、网络操作以及数据库操作等,记得在finally中释放资源。原先不仅会使得程序运行占用更少的资源,也会外理过多说要的可能资源未释放而指在的异常情况表。

在Java中,异常类的组织结构层次图如下图所示:

2.切忌使用空catch块

3.检查异常和非检查异常的选则

可能抛出的异常对象是非运行时异常,此方式的调用者需要显示地用try..catch块进行捕获可能继续向上层抛出异常。

上端的useExceptionsForFlowControl()用有4个 无限循环来增加count直到抛出异常,你这人 做法并不还能不能说让代码不易读,什么都有有使得程序运行执行速度降低。

(可能最终将异常抛给main方式,则共要交给jvm自动外理,此时jvm会简单地打印异常信息)

第十个 catch的FileNotFoundException将永远过多被捕获到,可能FileNotFoundException是IOException的子类。

在有多个catch块的完后 ,是按照catch块的先后顺序进行匹配的,一旦异常类型被有4个 catch块匹配,则过多与上端的catch块进行匹配。

最后打印出的是"finally",返回值被重新覆盖了。

三.深刻理解try,catch,finally,throws,throw十个 关键字

都需要看出,在try块中指在FileNotFoundException完后 ,就跳到第有4个 catch块,打印"file not found"信息,并将"step2"赋值给返回值,或者执行finally块,最后将返回值返回。