Java编程异常处理最佳实践【推荐】

  

Java中的异常处理不是一个简单的话题。初学者很难理解,甚至有经验的开发人员也会花几个小时来讨论应该如何抛出或处理这些异常。这就是为什么大多数开发团队都有自己的异常处理的规则和方法。如果你是一个团队的新手,你可能会惊讶于这些方法与你之前使用过的那些方法有多么不同。常见的异常类型:
  

  

<强> NullPointerException,空指针引用异常
  ClassCastException——类型强制转换异常
  lllegalArgumentException——传递非法参数异常
  ArithmeticException——算术运算异常
  ArrayStoreException——向数组中存放与声明类型不兼容对象异常
  IndexOutOfBoundsException——下标越界异常
  NegativeArraySizeException——创建一个大小为负数的数组错误异常
  NumberFormatException——数字格式异常
  SecurityException——安全异常
  UnsupportedOperationException,方式不支持的操作异常
  EOFException:文件已结束异常
  FileNotFoundException:文件未找到异常
  SQLException异常:操作数据库异常
  IOException:输入输出异常
  NoSuchMethodException:方法未找到异常
  

  

然而,有几种异常处理的最佳方法被大多数开发团队所使用。下面为常见的几种实用的异常处理方法。
  

  

<强> 1。在最后中清理资源或者使用Try-With-Resource语句
  

  

通常情况下,你在尝试中使用了一个资源,比如InputStream,之后需要关闭它。在这种情况下,一个常见的错误是在尝试的末尾关闭了资源。

        公共空间doNotCloseResourceInTry () {   FileInputStream inputStream=零;   尝试{   文件文件=新文件(“。/tmp.txt”);   inputStream=new FileInputStream(文件);//使用inputStream阅读文件//不做这个   inputStream.close ();   }捕捉(FileNotFoundException e) {   log.error (e);   }捕捉(IOException e) {   log.error (e);   }   }      

问题是,只要不抛出异常,这种方法就可以很好地运行。赶紧内的所有语句都将被执行,资源也会被关闭。
  

  

但是你在尝试里调用了一个或多个可能抛出异常的方法,或者自己抛出异常。这意味着可能无法到达尝试的末尾,因此,将不会关闭这些资源。
  

  

所以应该将清理资源的代码放入最后中,或者使用Try-With-Resource语句。
  

  

<强>使用最后
  

  

相比于尝试,无论是在成功执行试里的代码后,或是在追赶中处理了一个异常后,最后里的内容是一定会被执行的。因此,可以确保清理所有已打开的资源。

        公共空间closeResourceInFinally () {   FileInputStream inputStream=零;   尝试{   文件文件=新文件(“。/tmp.txt”);   inputStream=new FileInputStream(文件);//使用inputStream阅读文件   }捕捉(FileNotFoundException e) {   log.error (e);   最后}{   如果(inputStream !=null) {   尝试{   inputStream.close ();   }捕捉(IOException e) {   log.error (e);   }   }   }   }      

Java 7的Try-With-Resource语句
  

  

另一个选择是Try-With-Resource语句,在介绍Java异常处理中更详细地说明了这一点。
  如果你的资源实现了AutoCloseable接口,就可以使用它,这正是大多数Java标准资源所做的。当你在尝试子句中打开资源时,它将在尝试被执行后自动关闭,或者处理一个异常。

        公共空间automaticallyCloseResource () {   文件文件=新文件(“。/tmp.txt”);   试(FileInputStream inputStream=new FileInputStream(文件);){//使用inputStream阅读文件   }捕捉(FileNotFoundException e) {   log.error (e);   }捕捉(IOException e) {   log.error (e);   }   }      

<强> 2。给出准确的异常处理信息
  

  

你抛出的异常越具体越好。一定要记住,一个不太了解你代码的同事,也许几个月后,需要调用你的方法,并且处理这个异常。
  

  

因此,请确保提供尽可能多的信息,这会使你的API更容易理解,因此,你方法的调用者将能够更好地处理异常,或者通过额外的检查来避免它。
  

  

所以,要尽量能更好地描述你的异常处理信息,比如用NumberFormatException代替IllegalArgumentException,避免抛出一个不具体的异常。

Java编程异常处理最佳实践【推荐】