Java异常处理和设计

  • 时间:
  • 浏览:0

被try块包围的代码说明这段代码肯能会居于异常,一旦居于异常,异常便会被catch捕获到,或者都要在catch块中进行异常补救。

当然还能这样采用throw关键字手动来抛出异常对象。下面看一另一个多例子:

2.切忌使用空catch块

3、在代码块用throw手动抛出一另一个多异常对象,此时完会并就有具体情况,跟2)中的例如:

当然肯能这样居于异常,则catch块过多执行。或者finally块无论在哪几种具体情况下完会会执行的(这点要非常注意,或者次要具体情况下,完会将释放资源的操作放在去finally块中进行)。

在Java中肯能都要补救异常,都要先对异常进行捕获,或者再对异常具体情况进行补救。如保对肯能居于异常的代码进行异常捕获和补救呢?使用try和catch关键字即可,如下面一段代码所示:

以下是根据前人总结的这种 异常补救的建议:

能这样看出,在try块中居于FileNotFoundException以前,就跳到第一另一个多catch块,打印"file not found"信息,并将"step2"赋值给返回值,或者执行finally块,最后将返回值返回。

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

5.之之后 将提供给用户看的信息放在去异常信息里

比如使用空的引用、数组下标越界、内存溢出错误等,哪几种完会意外的具体情况,背离亲戚亲戚朋友系统进程并就有的意图。错误在亲戚亲戚朋友编写系统进程的过程中会另一个多劲居于,包括编译期间和运行期间的错误,在编译期间出先的错误有编译器帮助亲戚亲戚朋友一同修正,然而运行期间的错误便完会编译器力所能及了,或者运行期间的错误往往是难以预料的。

Java中如保补救异常

展示给用户错误提示信息最好之之后 跟系统进程混淆一同,比较好的法子是将所有错误提示信息放在去一另一个多配置文件中统一管理。

二.Java中如保补救异常

Exception,也或者亲戚亲戚朋友另一个多劲见到的这种 异常具体情况,比如NullPointerException、IndexOutOfBoundsException,哪几种异常是亲戚亲戚朋友能这样补救的异常。

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

肯能有使用文件读取、网络操作以及数据库操作等,记得在finally中释放资源。原来不仅会使得系统进程占用更少的资源,也会补救之也过多的肯能资源未释放而居于的异常具体情况。

一旦你决定抛出异常,你就要决定抛出哪几种异常。这上边的主要间题或者抛出检查异常还是非检查异常。

2)肯能父类的法子声明一另一个多异常exception1,则子类在重写该法子的以前声明的异常这样是exception1的父类;

下面亲戚亲戚朋友来看一下异常机制中八个关键字的用法以及都要注意的地方。

6.补救多次在日志信息中记录同一另一个多异常

另一个多块执行的顺序为try—>catch—>finally。

unchecked exception(非检查异常),也称运行时异常(RuntimeException),比如常见的NullPointerException、IndexOutOfBoundsException。对于运行时异常,java编译器之之后 求都要进行异常捕获补救肯能抛出声明,由系统进程员自行决定。

(肯能最终将异常抛给main法子,则共要交给jvm自动补救,此时jvm会简单地打印异常信息)

谨慎地使用异常,异常捕获的代价非常高昂,异常使用过多会严重影响系统进程的性能。肯能在系统进程中并能用if语句和Boolean变量来进行逻辑判断,这样尽量减少异常的使用,从而补救之也过多的异常捕获和补救。比如下面这段经典的系统进程:

2、在该代码的法子体外用throws进行抛出声明,告知此法子的调用者这段代码肯能会出先哪几种异常,你都要谨慎补救。此时有并就有具体情况:

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

3)肯能父类的法子声明的异常类型这样非运行时异常(运行时异常),则子类在重写该法子的以前声明的异常也这样有非运行时异常(运行时异常),这样中含运行时异常(非运行时异常)。

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

肯能声明抛出的异常是运行时异常,此法子的调用者能这样选用 地进行异常捕获补救。

只在异常最之前 开使居于的地方进行日志信息记录。之后 具体情况下异常完会层层向上跑出的,肯能在每次向上抛出的以前,都Log到日志系统中,则会原应无从查找异常居于的根源。

异常的英文单词是exception,字面翻译或者“意外、例外”的意思,也或者非正常具体情况。事实上,异常本质上是系统进程上的错误,包括系统进程逻辑错误和系统错误。

throws表示出先异常的并就有肯能性,之之后 完会居于哪几种异常;throw则是抛出了异常,执行throw则一定抛出了并就有异常对象。两者完会消极补救异常的法子(这里的消极并完会说这种 法子不好),或者抛出肯能肯能抛出异常,或者过多由法子去补救异常,真正的补救异常由此法子的上层调用补救。

肯能将这种 系统进程稍微修改一下,将finally块中的return语句注释加在,运行结果是:

之之后 把上层类的异常放在去最前面的catch块。比如下面这段代码:

在使用try..catch..finally块的以前,注意千万之之后 在finally块中使用return,肯能finally中的return会覆盖已有的返回值。下面看一另一个多例子:

每每个人建议尽量补救检查异常的使用,肯能我觉得该异常具体情况的出先很普遍,都要提醒调用者注意补救语句,就使用检查异常;或者使用非检查异常。

Error是无法补救的异常,比如OutOfMemoryError,一般居于这种 异常,JVM会选用 终止系统进程。或者亲戚亲戚朋友编写系统进程时不都要关心例如异常。

以下是本文的目录大纲:

检查异常原应了过多的try…catch代码,肯能有之后 检查异常对开发人员来说是无法合理地进行补救的,比如SQLException,而开发人员却不得不去进行try…catch,原来就会原应另一个多劲出先原来并就有具体情况:逻辑代码这样很少的几行,而进行异常捕获和补救的代码却有之后 行。原来不仅原应逻辑代码阅读起来晦涩难懂,或者降低了系统进程的性能。

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

2.throws和thow关键字

在捕获了异常以前哪几种完会做,共要忽略了这种 异常。千万之之后 使用空的catch块,空的catch块原应你在系统进程中隐藏了错误和异常,或者很肯能原应系统进程出先不可控的执行结果。肯能你非常肯定捕获到的异常过多以任何法子对系统进程造成影响,最好用Log日志将该异常进行记录,以便之前 方便更新和维护。

五.异常补救和设计的几个建议

或者肯能法子有返回值,切忌之之后 再finally中使用return,原来会使得系统进程形状变得混乱。

8. 在finally中释放资源

Exception类的异常包括checked exception和unchecked exception(unchecked exception也称运行时异常RuntimeException,当然这里的运行时异常并完会前面我所说的运行期间的异常,或者Java中用运行时异常这种 术语来表示,Exception类的异常完会在运行期间居于的)。

1.只在必要使用异常的地方才使用异常,之之后 用异常去控制系统进程的流程

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

下面看一另一个多示例:

在Java中,异常类的形状层次图如下图所示:

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

上边的useExceptionsForFlowControl()用一另一个多无限循环来增加count直到抛出异常,这种 做法并这样说让代码不易读,或者使得系统进程执行传输时延降低。

7. 异常补救尽量放在去高层进行

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

或者在catch块中进行捕获。

或者系统进程在运行期间出先了错误,肯能置之不理,系统进程便会终止或直接原应系统崩溃,显然这完会亲戚亲戚朋友希望看一遍的结果。或者,如保对运行期间出先的错误进行补救和补救呢?Java提供了异常机制来进行补救,通过异常机制来补救系统进程运行期间出先的错误。通过异常机制,亲戚亲戚朋友能这样更好地提升系统进程的健壮性。

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

这是并就有补救异常的法子。在Java中还提供了另并就有异常补救法子即抛出异常,顾名思义,也或者说一旦居于异常,我把这种 异常抛出去,让调用者去进行补救,每每个人不进行具体的补救,此时都要用到throw和throws关键字。

四.在类继承的以前,法子覆盖时如保进行异常抛出声明

一.哪几种是异常

1.try,catch,finally

1)throws出先在法子的声明中,表示该法子肯能会抛出的异常,或者交给上层调用它的法子系统进程补救,允许throws上边跟着多个异常类型;

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

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

或者,在一般具体情况下,我觉得尽量将检查异常转变为非检查异常交给上层补救。

也或者在Java中进行异常补救语句,对于肯能会居于异常的代码,能这样选用 并就有法子来进行异常补救:

1)父类的法子这样声明异常,子类在重写该法子的以前这样声明异常;

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

这段代码和上边一段代码的区别是,在实际的createFile法子中并这样捕获异常,或者用throws关键字声明抛出异常,即告知这种 法子的调用者此法子肯能会抛出IOException。这样在main法子中调用createFile法子的以前,采用try...catch块进行了异常捕获补救。

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

尽量将异常统一抛给上层调用者,由上层调用者统一之时如保进行补救。肯能在每个出先异常的地方都直接进行补救,会原应系统进程异常补救流程混乱,不有益于后期维护和异常错误排查。由上层统一进行补救会使得整个系统进程的流程清晰易懂。

肯能你想学习Java能这样来这种 Q群,首先是220,上边是142,最后是906,上边能这样学习和交流,完会资料能这样下载。

4.注意catch块的顺序

肯能抛出的异常对象是运行时异常,此法子的调用者能这样选用 地进行异常捕获补救。

try关键字用来包围肯能会出先异常的逻辑代码,它单独无法使用,都要配合catch肯能finally使用。Java编译器允许的组合使用形式这样以下并就有形式:

在类继承的以前,法子覆盖时如保进行异常抛出声明

2)一般会用于系统进程出先并就有逻辑时系统进程员主动抛出并就有特定类型的异常。throw只会出先在法子体中,当法子在执行过程中遇到异常具体情况时,将异常信息封装为异常对象,或者throw出去。throw关键字的一另一个多非常重要的作用或者 异常类型的转换(会在上边阐述道)。

异常补救和设计的几个建议

比如下面这段代码:

  本小节讨论子类重写父类法子的以前,如保选用 异常抛出声明的类型。下面是三点原则:

在Java中异常被当做对象来补救,根类是java.lang.Throwable类,在Java中定义了之后 异常类(如OutOfMemoryError、NullPointerException、IndexOutOfBoundsException等),哪几种异常类分为两大类:Error和Exception。

当然catch块能这样有多个,注意try块这样有一另一个多,finally块是可选的(或者最多这样有一另一个多finally块)。

checked exception(检查异常),也称非运行时异常(运行时异常以外的异常或者非运行时异常),java编译器强制系统进程员都要进行捕获补救,比如常见的IOExeption和SQLException。对于非运行时异常肯能不进行捕获肯能抛出声明补救,编译完会会通过。

在系统进程设计中,进行异常补救是非常关键和重要的一次要。一另一个多系统进程的异常补救框架的好坏直接影响到整个项目的代码质量以及后期维护成本和难度。试想一下,肯能一另一个多项目从头到尾这样考虑过异常补救,当系统进程出错从哪里寻找出错的根源?

这段系统进程的输出结果为:

肯能你想学习Java能这样来这种 Q群,首先是220,上边是142,最后是906,上边能这样学习和交流,完会资料能这样下载。

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

哪几种是异常

从这种 例子说明,无论try块肯能catch块中否有中含return语句,完会执行finally块。