知识大全 Java异常
Posted 知
篇首语:你今天的日积月累,早晚会成为别人的望尘莫及。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java异常相关的知识,希望对你有一定的参考价值。
Java异常 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
在可能会出现exception的地方 要使用try-catch或者throws或者两者都要 我的判断依据是 如果对可能出现的exception不想被外部(方法的调用者)知道 就在方法内部try-catch掉这个exception 如果希望外部知道 则在catch到之后把exception直接抛出或者抛出自定义的exception
一 异常的种类
java异常可以分成两大类 Exception和RuntimeException(虽然RuntimeException是从Exception继承的) exception异常代表 无法避免的异常 如io异常 往往这类异常是由于外部原因造成的 程序本身无法保证他们不发生 所以这类异常必须捕获 如果在函数内部无法处理这个异常必须再次抛出(在函数后面用throws语句) 如果什么都不做就出现编译错误
runtimexception是指 可以避免的异常 如 null引用异常 这类异常都是由程序内部原因造成的 是可以避免的 对于这类异常可以忽略他们 但一旦发生程序就会异常终止 这类异常对debug非常有帮助 当然 如果需要也可以catch
另外 有些地方即使不会有exception 但是从商业逻辑上是错误的 非预期的 也可以抛出user exception 例如 用户输入非法 bank account非法透支等等
二 主要原则
处理意外的一个重要原则 就是要么处理 要么接着抛 决不能吃掉(You either handle it or throw it You don t eat it )这就是说 当你捕获一个异常之后 必须决定是否立即处理这个异常 或者继续抛出这个异常(或者另一个自定义异常) 以便由调用的客户端捕获之 当客户端捕获到以后 又会继续进行类似的判断
一般来说 GUI端是要处理异常的 比如JSP捕获到异常之后 需要先是给用户一个友好的出错信息 而不要给出系统的出错信息 系统的出错信息一方面不太友好 另一方面提供了太多的系统信息 容易被恶意用户用来攻击系统
换句话说 所有的异常最终必须有一个终极的处理者 这就是GUI 至于中间的环节 比如在服务器端运行的JavaBean是否要处理捕获到的异常 还是继续抛出所捕获的异常 需要视具体情况处理
除非你想把异常处理的责任交给调用者 一般不用throws 比如你要读入一些文件 如果你想通知调用者 让调用者决定如何处理这个异常 你就把这个异常throws给调用者 如果你知道应该如何处理这个异常 或者你想把异常马上解决 你可以就地catch她
这完全取决于你想把异常自己立即处理还是想把处理责任返回给调用者 取决于你的程序的结构和要求
需要注意的有
如果无法处理某个异常 那就不要捕获它
如果捕获了一个异常 请不要胡乱处理它
尽量在靠近异常被抛出的地方捕获异常
在捕获异常的地方将它记录到日志中 除非您打算将它重新抛出
按照您的异常处理必须多精细来构造您的方法
需要用几种类型的异常就用几种 尤其是对于应用程序异常
三 异常嵌套和捕获适当的异常
按照Java语言的定义 所谓异常(Exception)指的就是向调用方法(calling method)表示发生非正常情况的习惯方式 下面讨论两种在处理异常时可兹利用的技术 异常嵌套和捕获适当的异常
异常嵌套
你在试图捕获异常并打算扔出异常时该采取什么措施呢?同时 你希望原始的异常信息可用吗?
要回答以上的问题你不妨尝试一下NestedException类 具体的编程并不难 唯一要做的无非是利用构造器并且重载printStackTrace()以便显示出正确的数据
此外 你还应当考虑封装Throwable而非Exception类来创建更具有重用性的组件 之后 你可以创建NestedRuntimeException变量封装Throwable但无需对其进行声明
捕获适当的异常
正确地处理异常并不是一项轻松的任务 这是因为异常的处理有时会导致程序出现其他不明行为 不过 以下三条规则可以帮助你避免错误处理异常所可能遭遇的风险
规则 # : 总是捕获扔出异常的类型而不要理睬异常的超类 为了遵守通常的代码习惯 你可以采用Exception类的大写字母作为变量名 如下所示
catch(FileNotFoundException fnfe)
以及
catch(SQLException sqle)
规则 # : 决不让catch块留空 在很多情况下虽然确实编写了try/catch块但在代码的catch部分却什么都没有做 或者 如果采用了日志API(Logging API) 那么请编写代码把异常写到日志中
规则 # : 决不扔出Exception基类的实例 开发人员应当总是扔出自己创建的异常类
扔出异常的API很难处理 在声明方法扔出java lang Exception的情况下 所有的问题都会强加在API用户的头上 这样他们就无法以一种专业的编程方式来处理异常 通过为扔出API声明Exception类的子类这一举措 API开发人员就可以减轻用户的负担
cha138/Article/program/Java/hx/201311/26176相关参考
Java中的两类异常 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Java提供了两类主要的异常
对于java异常处理你是否都掌握了呢如果是你是否能在下面这段代码中迅速找出异常处理的六个问题吗? &nbs
javalangNullPointerException 这个异常大家肯定都经常遇到异常的解释是程序遇上了空指针简单地说就是调用了未经初始化的对象或者是不存在的对象这个错误经常出现在创建图片调用
在做java网络编程的时候常出现以下种错误信息 EOFException  
JavaSocket常见异常处理 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在java网络编
Java异常处理原理及应用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! readLine方法有
Java接口的异常设计疑惑 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 疑惑在设计接口的时对于
Java中异常机制的深入研究 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 由于本文旨在探讨Ja
初探Java7异常处理功能增强 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 今天我们来看看Ja