025-86901720


全国监督服务热线:9:00-23:00

海量精品课程
点击免费试听

  • 11条Java异常处理的实践方法

  • 分类: 合肥学码思 > java教程 时间:2019年02月11日
  • 摘要:在调用其他模块时,最好捕获由该模块抛出的具体的异常。如果某个被调用模块抛出了多个异常,那么只捕获这些异常的父类是不好的编程习惯。

  •  要想在实际项目中正确处理Java异常,你应该熟练掌握一些Java异常处理的实践方法。下面一起和合肥学码思老师看看吧。

    11条Java异常处理的实践方法

     

      1.不要在catch语句块中压制异常

    11条Java异常处理的实践方法

     

      在异常处理时进行异常压制是非常不好的编程习惯,上面的例子中,无论抛出什么异常都会被忽略,以至没有留下任何问题线索。如果在这一层次不知道如何处理异常,最好将异常重新抛出,由上层决定如何处理异常。>>Java的主要特性有哪些?

    11条Java异常处理的实践方法

      2.要在方法定义分句中定义具体的异常

     

      按照publicFileInputStreamtestMethod1()throwsException{这种写法,表示该方法会抛出所有受检查异常,这不是一个良好的编程习惯。在这种情况下,我们最好抛出足够具体的异常,以便调用者进行合适的捕获和处理,例如publicFileInputStreamtestMethod1()throwsIOException{。

     

      3.捕获具体的异常

     

      在调用其他模块时,最好捕获由该模块抛出的具体的异常。如果某个被调用模块抛出了多个异常,那么只捕获这些异常的父类是不好的编程习惯。

     

      例如,如果一个模块抛出FileNotFoundException和IOException,那么调用这个模块的代码最好写两个catch语句块分别捕获这两个异常,而不要只写一个捕获Exception的catch语句块。

     

      正确的写法如下:

    11条Java异常处理的实践方法

     

      你最好不要这么写:

    11条Java异常处理的实践方法

     

      4.记得在finally语句块中释放资源

     

      当你在代码中建立了数据库连接、文件操作符或者其他需要被及时释放的系统资源,如果你没有及时释放这些资源,会影响到系统的性能。

     

      为了避免这种情况发生,可以使用Java7的try(opentheresources){dealwithresources}语句,如果你还是习惯这种老式写法,则可以按照如下方式写

    11条Java异常处理的实践方法

     

      5.异常会影响性能

     

      Performance

     

      异常处理的性能成本非常高,每个Java程序员在开发时都应牢记这句话。创建一个异常非常慢,抛出一个异常又会消耗1~5ms,当一个异常在应用的多个层级之间传递时,会拖累整个应用的性能。

     

      仅在异常情况下使用异常;

     

      在可恢复的异常情况下使用异常;

     

      尽管使用异常有利于Java开发,但是在应用中最好不要捕获太多的调用栈,因为在很多情况下都不需要打印调用栈就知道哪里出错了。因此,异常消息应该提供恰到好处的信息。

     

      6.使用标准异常

     

      如果使用内建的异常可以解决问题,就不要定义自己的异常。JavaAPI提供了上百种针对不同情况的异常类型,在开发中首先尽可能使用JavaAPI提供的异常,如果标准的异常不能满足你的要求,这时候创建自己的定制异常。尽可能得使用标准异常有利于新加入的开发者看懂项目代码。

     

      7.正确得包装异常类型

     

      当需要在应用重新抛出异常时,应该正确得包装原始异常,否则会丢失原始异常,例如下面的例子中:

    11条Java异常处理的实践方法

     

      这个程序的输出为:

    11条Java异常处理的实践方法

     

      这里发现,IOException的调用栈已经丢失了,因为我们在catch语句块中没有正确包装IOException。若将catch语句块修改成下面这样,这可以发现原始异常的调用栈也被打印出来了。

    11条Java异常处理的实践方法

     

      这时候的输出如下: 

    11条Java异常处理的实践方法

      8.避免在finally语句块中抛出异常


     

    11条Java异常处理的实践方法


      在上面的这个代码片段中,finally代码块也可能再次抛出异常。如果同时抛出两个异常,则第一个异常的调用栈会丢失。在finally语句块中最好只做打印错误信息或者关闭资源等操作,避免在finally语句块中再次抛出异常。

     

      9.不要使用异常控制程序的流程

     

      不应该使用异常控制应用的执行流程,例如,本应该使用if语句进行条件判断的情况下,你却使用异常处理,这是非常不好的习惯,会严重影响应用的性能。

     

      10.不要捕获Throwable类

     

      在应用中不应捕获Throwable类,Error是Throwable类的子类,当应用抛出Errors的时候,一般都是不可恢复的情况。

     

      11.为异常记录合适的文档

     

      为应用中定义的异常定义合适的文档,如果你写了一个自定义的异常却没有文档,其他开发者会不清楚这个异常的含义,为你定义的异常配备对应的文档是一个非常好的习惯。

     

      以上是11个Java异常处理的实践方法,希望对大家的Java技术学习有所帮助,想要了解更多关于Java技术的学习知识和技巧,欢迎大家进一步咨询合肥学码思的老师。


  • Java的主要特性有哪些?
    Java重点技术知识:面向对象

申请试听 | 学费咨询 | 在线报名 | 申请补贴 | 软件培训 | 网站地图

2016-2020 南京学码思教育科技有限公司 .All Rights Reserved

苏ICP备16033487号 www.hfxms.com.cn

全国热线

400-080-3312

全国监督服务热线:9:00-23:00