Exception
Exception异常处理,是Java的重要特性之一。Exception分为两种,一种是System Exception(系统异常),一种是Application Exception(应用程序异常)。 
System Exception(系统异常)继承RuntimeException类,不需要显示的catch或者throw。 
Application Exception(应用程序异常)继承RuntimeException类之外的Exception,必须显示的catch或者throw。 
(说明: RuntimeException类是Exception类的子类。) 
以下的代码throws所有异常。 
void func( …) throws Exception{ 
} 
这样的代码,屏蔽了包括系统异常在内的所有异常。在这样的函数中,调用任何有可能抛出异常的代码,也不会有任何编译错误。而且,调用这个函数的代码必须写成如下: 
try{ 
       … 
       func(..) 
       … 
}catch(Exception e){ 
} 
以上的代码能够catch包括系统异常在内的所有异常,一般只出现测试程序中。这种异常处理方法屏蔽了所有异常。建议显示的抛出特定的应用程序异常。代码如下: 
void func( …) throws ServletException{ 
 // 如果有其它的异常,必须包装成ServletException 抛出 
       try{ 
       }catch(SQLException e){ 
              throw new ServletException(e); 
       } 
} 
调用这个函数的代码写成如下: 
try{ 
       … 
       func(..) 
       … 
}catch(ServletException e){ 
} 
// 如果需要catch包括系统异常在内的所有异常,可以在后面加入如下语句。 
catch(Exception e){ } 
finally
在涉及到资源释放(比如,数据库资源,文件资源)的函数里,函数的出口数目是一个需要考虑的问题。一般的解决方法是,尽量让这种函数只在函数结束处有一个出口。由于逻辑的复杂性,不可能强求做到这一点。可以使用finally机制来控制。 
例如,下面的代码 
  
void func( ..) throws ServletException{ 
       if(...) 
         return; // won’t go finally block 
  
       try{ 
              … 
              if(…) 
                return; // will go finally block 
              … 
       }catch(SQLException e){ 
              throw new ServletException(e): // will go finally block 
       }catch(IOException e){ 
              return; // will go finally block 
       }finally{ 
              // release resource 
       } 
} 
   
 
  |