我找到了一段 Base64 编码的代码。在阅读它时,我偶然发现了这样的事情:
try {
// GZip -> Base64 -> ByteArray
baos = new java.io.ByteArrayOutputStream();
b64os = new OutputStream( baos, ENCODE | options );
gzos = new java.util.zip.GZIPOutputStream( b64os );
gzos.write( source, off, len );
gzos.close();
} // end try
catch( java.io.IOException e ) {
// Catch it and then throw it immediately so that
// the finally{} block is called for cleanup.
throw e;
} // end catch
finally {
try{ gzos.close(); } catch( Exception e ){}
try{ b64os.close(); } catch( Exception e ){}
try{ baos.close(); } catch( Exception e ){}
} // end finally
如您所见,IOException 在 catch 块中被捕获并立即重新抛出,这似乎不是一个错误,因为注释甚至描述了操作并将 finally 块的执行命名为目的。
但是无论如何都不会调用 finally 块吗?
资料来源: