JDK1.7でAutoCloseableインタフェースの使用について
10102 ワード
1.APIドキュメントの表示、AutoCloseable関連定義の検索
このインタフェースはJDK 1からなる.7導入が開始され、インタフェースには1つの方法close()しかありません.
2.AutoCloseableインタフェースをテストし、自動クローズ処理を実現する
2.1新規インタフェースIMessage AutoCloseableインタフェースの継承
2.2新規NetMessageクラス実装IMessageインタフェース(注意13行:close()メソッド放出異常)
2.3試験類
2.4運転結果
3.FileWriterを例に、2つの異なる操作方法を比較します.
3.1.JDK1.7の前にfinallyブロックで手動でリソースを閉じます
問題:開発中に一部の資源を閉鎖することを忘れ、メモリが漏れてしまう可能性がある. クローズコードは論理的に冗長で、読みやすさが悪い.
3.2.JDK1.7以降、AutoCloseableで自動クローズ
APIドキュメントを表示することで、AutoCloseableで既知のすべてのインプリメンテーションクラスを表示できます.ここではFileWriterを例に挙げます.FIleWriterをクリックし、内部実装を確認: OutputStreamWriterをクリックし、抽象クラスWriterを継承: Writerをクリックし、Closeableインタフェースを実現: Closeableインタフェースをクリックし、内部実装を確認すると、このインタフェースがAutoCloseableインタフェースを継承していることがわかる(このインタフェースはclose()メソッドのみ):
まとめ:AutoCloseableは1.7バージョンから導入; AutoCloseableは1つの方法close()しかなく、異常を放出する. AutoCloseableの自動シャットダウンを実現する: 1.インタフェースはAutoCloseableインタフェース(またはクラス実装AutoCloseableインタフェース)を継承します.
2.結合例外処理文:try()...catch()は自動クローズ処理を実現する.
その他の結論:
1.JDK1.7まではtryが一般的に使われていましたが...Catch()異常をキャプチャし、finally部分でIOストリームなどを閉じるが、JDK 1.7以降、Java 7のコンパイラと実行環境は新しいtry-with-resources文(ARMブロック、自動リソース管理)をサポートし、()に書かれたオブジェクトに対応するクラスは自動クローズインタフェースAutoCloseableを実現した.
2.AutoCloseableインタフェースを実装するクラスのインスタンスは、tryの後(リソース付きtry文)に配置され、try(){}の終了時に自動的にこれらのリソースが閉じられます(close()メソッドを呼び出します).
3.リソース付きtry文の3つのキー:リソース付きtry文で管理されるリソースは、AutoCloseableインタフェースを実現したクラスのオブジェクトでなければならない. try文で宣言されたリソースは暗黙的にfinalと宣言される. 各宣言をセミコロンで区切って複数のリソースを管理できる.
本文の一部の内容と結論は他の資料に基づいて整理・修正され、不適切な点があれば、伝言を残して訂正してください.
public interface AutoCloseable
このインタフェースはJDK 1からなる.7導入が開始され、インタフェースには1つの方法close()しかありません.
1 void close() throws Exception // ,
2.AutoCloseableインタフェースをテストし、自動クローズ処理を実現する
2.1新規インタフェースIMessage AutoCloseableインタフェースの継承
1 interface IMessage extends AutoCloseable {
2 public void send(); //
3 }
2.2新規NetMessageクラス実装IMessageインタフェース(注意13行:close()メソッド放出異常)
1 class NetMessage implements IMessage { //
2 private String msg;
3
4 public NetMessage(String msg) {
5 this.msg = msg;
6 }
7
8 public boolean open() { //
9 System.out.println("【OPEN】 ");
10 return true;
11 }
12
13 public void close() throws Exception {
14 System.out.println("【CLOSE】 ");
15 }
16
17 @Override
18 public void send() {
19 if (this.open()) {
20 System.out.println("【** **】" + this.msg);
21 }
22 }
23 }
2.3試験類
1 try (IMessage message = new NetMessage("Hello world")) {
2 message.send();
3 } catch (Exception e) {
4 e.printStackTrace();
5 }
2.4運転結果
【OPEN】
【** **】Hello world
【CLOSE】
3.FileWriterを例に、2つの異なる操作方法を比較します.
3.1.JDK1.7の前にfinallyブロックで手動でリソースを閉じます
1 public static void writeFile(String str) {
2 FileWriter fw = null;
3 try {
4 fw = new FileWriter("E://test.txt", true);
5 fw.write(str);
6 } catch (IOException e) {
7 e.printStackTrace();
8 } finally {
9 if (fw != null) {
10 try {
11 fw.close();
12 } catch (IOException e) {
13 e.printStackTrace();
14 }
15 }
16 }
17 }
問題:
3.2.JDK1.7以降、AutoCloseableで自動クローズ
1 public static void newWriteFile(String str) {
2 try (FileWriter fw = new FileWriter("", true)) {
3 fw.write(str);
4 } catch (IOException e) {
5 e.printStackTrace();
6 }
7 }
APIドキュメントを表示することで、AutoCloseableで既知のすべてのインプリメンテーションクラスを表示できます.ここではFileWriterを例に挙げます.
public class FileWriter extends OutputStreamWriter
public class OutputStreamWriter extends Writer
public abstract class Writer implements Appendable, Closeable, Flushable
public interface Closeable extends AutoCloseable
まとめ:
2.結合例外処理文:try()...catch()は自動クローズ処理を実現する.
その他の結論:
1.JDK1.7まではtryが一般的に使われていましたが...Catch()異常をキャプチャし、finally部分でIOストリームなどを閉じるが、JDK 1.7以降、Java 7のコンパイラと実行環境は新しいtry-with-resources文(ARMブロック、自動リソース管理)をサポートし、()に書かれたオブジェクトに対応するクラスは自動クローズインタフェースAutoCloseableを実現した.
2.AutoCloseableインタフェースを実装するクラスのインスタンスは、tryの後(リソース付きtry文)に配置され、try(){}の終了時に自動的にこれらのリソースが閉じられます(close()メソッドを呼び出します).
3.リソース付きtry文の3つのキー:
本文の一部の内容と結論は他の資料に基づいて整理・修正され、不適切な点があれば、伝言を残して訂正してください.