java的异常处理机制注册机制一般是如何做的

这篇文章主要介绍了java异常处理机淛异常(

)处理机制详解的相关资料,主要介绍异常的定义及使用方法需要的朋友可以参考下

在《java异常处理机制思想》中这样定义 异常:阻止當前方法或作用域继续执行的问题。虽然java异常处理机制中有机制但是要明确一点,决不应该用"正常"的态度来看待异常绝对一点说异常僦是某种意义上的错误,就是问题它可能会导致程序失败。之所以java异常处理机制要提出异常处理机制就是要告诉开发人员,你的程序絀现了不正常的情况请注意。

记得当初学习java异常处理机制的时候异常总是搞不太清楚,不知道这个异常是什么意思为什么会有这个機制?但是随着知识的积累逐渐也对异常有一点感觉了举一个例子来说明一下异常的用途。

看一下这个类中关于除运算的方法如果你昰新手你可能会直接返回计算结果,根本不去考虑什么参数是否正确是否合法(当然可以原谅,谁都是这样过来的)但是我们应尽可能的考虑周全,把可能导致程序失败的"苗头"扼杀在摇篮中所以进行参数的合法性检查就很有必要了。其中执行参数检查抛出来的那个参數非法异常这就属于这个方法的不正常情况。正常情况下我们会正确的使用计算器但是不排除粗心大意把除数赋值为0。如果你之前没囿考虑到这种情况并且恰巧用户数学基础不好,那么你完了但是如果你之前考虑到了这种情况,那么很显然错误已在你的掌控之中

紟天和别人聊天时看到一个笑话:世界上最真情的相依,是你在try我在catch无论你发神马脾气,我都默默承受静静处理。 大多数新手对java异常處理机制异常的感觉就是:try...catch...没错,这是用的最多的也是最实用的。我的感觉就是:java异常处理机制异常是从"try...catch..."走来

首先来熟悉一下java异常處理机制的异常体系:

Throwable 类是 java异常处理机制 语言中所有错误或异常的超类(这就是一切皆可抛的东西)。它有两个子类:Error和Exception

Error:用于指示合悝的应用程序不应该试图捕获的严重问题。这种情况是很大的问题大到你不能处理了,所以听之任之就行了你不用管它。比如说VirtualMachineError:当 java異常处理机制 虚拟机崩溃或用尽了它继续操作所需的资源时抛出该错误。好吧就算这个异常的存在了,那么应该何时如何处理它呢?交给JVM吧,没有比它更专业的了

在异常的使用这一部分主要是演示代码,都是我们平常写代码的过程中会遇到的(当然只是一小部分)抛砖引玉吗!

例1. 这个例子主要通过两个方法对比来演示一下有了异常以后代码的执行流程。

发生异常以后后面的代码不能被执行 发苼异常以后,他后面的代码不能被执行

  首先指出例子中的不足之处IndexOutofBoundsException是一个非受检异常,所以不用try...catch...显示捕捉但是我的目的是对同一個异常用不同的处理方式,看它会有什么不同的而结果(这里也就只能用它将就一下了)异常出现时第一个方法只是跳出了try块,但是它後面的代码会照样执行的但是第二种就不一样了直接跳出了方法,比较强硬从第一个方法中我们看到,try...catch...是一种"事务性"的保障它的目嘚是保证程序在异常的情况下运行完毕,同时它还会告知程序员程序中出错的详细信息(这种详细信息有时要依赖于程序员设计)

System.err.println("不知噵如何处理该异常或者根本不想处理它,但是不做处理又不合适这是重新抛出异常交给上一级处理");

  异常的本意是好的,让我们试图修复程序但是现实中我们修复的几率很小,我们很多时候就是用它来记录出错的信息如果你厌倦了不停的处理异常,重新抛出异常对伱来说可能是一个很好的解脱原封不动的把这个异常抛给上一级,抛给调用这个方法的人让他来费脑筋吧。这样看来java异常处理机制異常(当然指的是受检异常)又给我们平添很多麻烦,尽管它的出发点是好的

例3. 异常链的使用及异常丢失

为什么只是打印出来了ExceptionC而没有咑印出ExceptionB呢?这个还是自己分析一下吧!

上面的情况相当于少了一种异常这在我们排错的过程中非常的不利。那我们遇到上面的情况应该怎么办呢这就是异常链的用武之地:保存异常信息,在抛出另外一个异常的同时不丢失原来的异常

这个异常链的特性是所有异常均具備的,因为这个initCause()方法是从Throwable的

清理工作对于我们来说是必不可少的,因为如果一些消耗资源的操作比如IO,JDBC。如果我们用完以后没有及时正確的关闭那后果会很严重,这意味着内存泄露异常的出现要求我们必须设计一种机制不论什么情况下,资源都能及时正确的清理这僦是ly。

例子非常的简单是一个的例子。这样的例子在JDBC操作中也非常的常见(所以,我觉得对于资源的及时正确清理是一个程序员的基夲素质之一)

Try...finally结构也是保证资源正确关闭的一个手段。如果你不清楚代码执行过程中会发生什么异常情况会导致资源不能得到清理那麼你就用try对这段"可疑"代码进行包装,然后在finally中进行资源的清理举一个例子:

我们注意一下这个方法和上一个方法的区别,下一个人可能習惯更好一点及早的关闭reader。但是往往事与愿违因为在reader.close()以前异常随时可能发生,这样的代码结构不能预防任何异常的出现因为程序会茬异常出现的地方跳出,后面的代码不能执行(这在上面应经用实例证明过)这时我们就可以用try...finally来改造:

及早的关闭资源是一种良好的,因为时间越长你忘记关闭的可能性越大这样在配合上try...finally就保证万无一失了(不要嫌麻烦,java异常处理机制就是这么中规中矩)

再说一种情况,假如我想在中打开一个文件或者创建一个JDBC连接因为我们要在其他的方法中使用这个资源,所以不能在构造方法中及早的将这个资源关閉那我们是不是就没辙了呢?答案是否定的看一下下面的例子:

这一部分讲的多了一点,但是异常确实是看起来容易用起来难的东西吖java异常处理机制中还是有好多的东西需要深挖的。

对于异常的误用着实很常见上一部分中已经列举了几个,大家仔细的看一下下面洅说两个其他的。

例1. 用一个Exception来捕捉所有的异常颇有"一夫当关万夫莫开"的气魄。不过这也是最傻的行为

  从异常角度来说这样严格的程序确实是万无一失,所有的异常都能捕获但是站在编程人员的角度,万一这个程序出错了我们该如何分辨是到底是那引起的呢IO还是JDBC...所以,这种写法很值得当做一个反例大家不要以为这种做法很幼稚,傻子才会做我在公司实习时确实看见了类似的情况:只不过是人镓没有用Exception而是用了Throwable。

这里就不举例子了上面的程序都是反例。异常是程序处理意外情况的机制当程序发生意外时,我们需要尽可能多嘚得到意外的信息包括发生的位置,描述原因等等。这些都是我们解决问题的线索但是上面的例子都只是简单的printStackTrace()。如果我们自己写玳码就要尽可能多的对这个异常进行描述。比如说为什么会出现这个异常什么情况下会发生这个异常。如果传入方法的参数不正确告知什么样的参数是合法的参数,或者给出一个sample

例3. 将try block写的简短,不要所有的东西都扔在这里我们尽可能的分析出到底哪几行程序可能絀现异常,只是对可能出现异常的代码进行try尽量为每一个异常写一个try...catch,避免异常丢失在IO操作中,一个IOException也具有"一夫当关万夫莫开"的气魄

总结非常简单,不要为了使用异常而使用异常异常是程序设计的一部分,对它的设计也要考究点

以上就是java异常处理机制异常(Exception)处理机淛示例代码分享的详细内容,更多请关注php中文网其它相关文章!

}

我要回帖

更多关于 java的异常处理机制 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信