オリジナル住所:https://www.cnblogs.com/itZhy/p/7636615.html
外部リソースを閉じなければならないことを確実にするために、通常は閉じたコードは、最終的には、ブロックするだけでなく、例外を閉じるときに、リソースがスローされるかもしれないということに留意しなければならない書かれています
たとえば、私たちは多くの場合、コードを使用するリソースをオフにします
1 公共 静的 ボイドメイン(文字列[]引数){ 2 のFileInputStreamのinputStream = NULL ; 3 試行{ 4 のinputStream = 新しい FileInputStreamを(新しいファイル( "試験" )); 5 のSystem.out.println(inputStream.read())。 6 } キャッチ(IOExceptionを電子){ 7 投 新規のRuntimeException(e.getMessage()、E)。 8 } 最後に{ 9 なら(のinputStream!= NULL ){ 10 トライ{ 11 inputStream.close(); 12 } キャッチ(IOExceptionを電子){ 13 投 新規のRuntimeException(e.getMessage()、E)。 14 } 15 } 16 } 17 }
外部オブジェクトは、リソース(例えばFileInputStreamのオブジェクト)AutoCloseableインターフェイスを実装を処理する場合、コードは、フォームの上部プレートを簡略化することができます。
1 公共 静的 ボイドメイン(文字列[]引数){ 2 トライ(FileInputStreamののinputStream = 新しい FileInputStreamを(新しいファイル( "試験" ))){ 3 のSystem.out.println(inputStream.read())。 4 } キャッチ(IOExceptionを電子){ 5 スロー 新規のRuntimeException(e.getMessage()、E)。 6 } 7 }
トライでリソースJVMの仮想マシンを使用すると、上記のコードを逆コンパイル機能が、シンタックスシュガーのJDKの実装は、例外を処理するための特別なコードがあることがわかります新しいものではありません。
var2.addSuppressed(var11)。
これは、別の知識のtry-とリソース文法を含む、異常な抑制と呼ばれています。外部リソースが処理されるときに例外が発生し、外部リソースのクローズの後工程で、異常被った場合、その後、あなたが外部リソースの処理中に発生したことをキャッチします、(例えばリードまたはライト)閉じたリソースエラーに遭遇し、異常は「抑制」が、異常をgetSuppressed方法によって廃棄されていない、抽出することができる異常が抑制されます。
概要
図1に示すように、JDK7にAutoCloseableインタフェースを実現するオブジェクトの外部リソースへのハンドルは、トライして、リソースよりエレガントな構文シャットリソースを使用プレート・コードを排除することができます。
try-とリソース、取り扱いおよび外部リソースへの外部リソースに閉じていない場合は異常苦しんでいる時に2、「オフ例外はない」、「処理の例外を」抑制されますスローされますが、「異常が閉じ」失ったが、例外リストでの抑制「例外処理」を保存。