上海Java培训
达内上海中山公园中心

13691148991

热门课程

Java 异常处理及方法总结

  • 时间:2017-11-06
  • 发布:上海java培训
  • 来源:达内新闻

Java 中出现的异常,经常让新手在处理异常时进入一些误区,关于Java中异常情况处理的问题,只有做好了才能提升开发人员的基本素养,提高系统的健壮性,提升用户体验,提高产品的价值。这里上海达内Java培训的小编希望大家能能够熟练掌握处理异常的一些注意点和原则,列出几种比较重要的处理方式,希望能帮助到你。

1、清理 Finally 块中的资源,或使用 Try-With-Resource 语句

在 try 块中使用资源时常发生,比如 InputStream ,是需要在用完之后关掉的。一个通常发生的错误是,在 try 块的末尾关掉资源:

上海Java培训:只要没有异常抛出,这种方法似乎可以工作得很好,try 中的所有语句都会被执行,然后资源也被关掉。

不过你因为某个原因添加了 try ,其中调用的一个或多个方法可能就会引发异常,甚至有可能是你自己引发了异常,此时就无法运行到 try 的结尾,结果资源没法被关掉。

因此,你应该把清理资源的代码都放在 finally 块中,或者使用Try-With-Resource 语句。

使用 finally 块

和 try 中的最后几行不一样,无论是 try 块被成功执行后还是在 catch 块中处理了异常,finally 块总是能被执行,以确保清掉所有打开的资源。

Java 7 的 Try-With-Resource 语句

另一个办法是使用 Try-With-Resource 语句。

如果你使用的资源实现接口是 AutoCloseable,就可以用这个语句,多数Java 标准资源都这么做。当你在 try 中打开资源,它可以在 try 执行完毕后或异常处理完后自动关闭资源。

2、特定的异常

异常越具体越好。要尽可能地提供更多信息,确保你的 API 更容易理解。 这样,当其他人调用你的方法才能更好地处理异常,或者避免在检查上浪费多余的时间。

3、把指定的异常记录下来

无论在什么时候你在方法签名中指定了一个异常,你都应该在你的 Javadoc 中记录下来。这和上一个做法目的相同,都是给调用者尽量多的信息,便于他们避免或者处理异常。

所以,要确保你在 Javadoc 中添加了 @throws 申明,说明什么样的情况会引发异常。

4、用描述性消息引发异常

这条和前两条背后的想法差不多,只是这次不用给方法调用者提供什么信息了。因为日志文件中或者监视器里收到异常报告时,每个人都必须读取异常消息。

因此,应该尽可能准确地描述问题,并提供最相关的信息帮助了解异常事件。

如果在一两句话中为该异常作出解释,这能帮助运维团队了解问题的严重程度,同时也让你在分析服务异常时更轻松。

如果你引发了一个特定的异常,它的类名就可能已经描述了错误类型,所以你也不用再提供更多信息了。上海Java培训机构举例:NumberFormatException 是个比较好的例子,当你在给一个字符串提供了错的格式,类 java.lang.Long 的构造函数就会引发这个异常。

NumberFormatException,这个名字已经告诉你问题所在了,你只需要提供导致问题的字符串。如果异常类的名称不具有表达性,需要在消息中提供所需的信息。

5、优先抓住最具体的异常

多数 IDE 可以实现。上海Java培训: 当尝试优先捕获较少特定的异常时,会报告一个无法访问的代码块。

只有与异常匹配的第一个 catch 块会被执行,如果你先抓住了 IllegalArgumentException,你就无法到达应该处理更具体的 NumberFormatException,因为NumberFormatException 是其子类。

总是优先捕获最具体的异常类,并将低精确度的 catch 块添加到列表末尾。

在以下代码段中,你可以看到一个这样的 try-catch 语句的示例。第一 catch 块处理所有的NumberFormatException,第二个则是处理所有非 NumberFormatException 的IllegalArgumentException。

异常通常是由一个错误的处理机制和同时使用的沟通媒介导致的。所以,在处理异常时要和让改异常出现的同事们讨论做法,从中找到导致异常的规则。这样可以最高效的方法来处理异常。

学习使我们处于不败之地,IT学习更能让我们适应互联网+大数据时代的高速发展,上海达内带你一同走进魔都的高薪阶层,做更有价值的事。【上海Java培训机构】达内

扫码获取免费学习机会

上一篇:大咖们都在聊“Java参与微服务这件事”
下一篇:TOP10:编程语言与软件质量之间的关系

上海java培训:形参与实参的区别(举例)

Java SE平台-JDK版本发布计划

上海Java培训:Java 8中使用Lambda表达式

JAVA程序设计:句柄是啥

选择城市和中心
贵州省

广西省

海南省