知识大全 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中的两类异常

Java中的两类异常  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Java提供了两类主要的异常

知识大全 java程序异常处理方法

   对于java异常处理你是否都掌握了呢如果是你是否能在下面这段代码中迅速找出异常处理的六个问题吗?     &nbs

知识大全 java中常见异常

  javalangNullPointerException  这个异常大家肯定都经常遇到异常的解释是程序遇上了空指针简单地说就是调用了未经初始化的对象或者是不存在的对象这个错误经常出现在创建图片调用

知识大全 java网络异常类型

   在做java网络编程的时候常出现以下种错误信息      EOFException  

知识大全 Java Socket常见异常处理

JavaSocket常见异常处理  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在java网络编

知识大全 Java异常处理原理及应用

Java异常处理原理及应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  readLine方法有

知识大全 Java 接口的异常设计疑惑

Java接口的异常设计疑惑  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  疑惑在设计接口的时对于

知识大全 Java中异常机制的深入研究

Java中异常机制的深入研究  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  由于本文旨在探讨Ja

知识大全 初探Java 7异常处理功能增强

初探Java7异常处理功能增强  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  今天我们来看看Ja