私は長い間のギャップの後にJavaでコードを書くことに戻ります - ここ数年のコーディング作業の多くは、PHPで行われています& JavaScript - 満足するためにもっと努力する必要があることを発見しています可変スコープや例外処理などの問題に関してはるかに厳しいJavaコンパイラです。私に何らかの問題を引き起こしたコードが以下に示されていますJava Scoping&Visibility Rules
File file = new File(path, fname);
FileOutputStream stream = null;
try
{
stream = new FileOutputStream(file);
stream.write(tosave.getBytes());
}
finally
{
try
{
if (null != stream) {stream.close();}
return true;
}
catch(Exception e){return false;}
}
これはコンパイラによって受け入れられました。しかし、私がここに着く前に、私はいくつかの問題にぶつかりました。
- 最初の試み:キャッチブロックなし。コンパイラは、FileOutputStreamを作成できないという事態に対処したいと思ったので、ボールを再生することを拒否しました。そのストリームに書き込むための同僚。私はこの推論の背後にある論理を理解し、それを好む。
- 2回目の試み:キャッチブロック...:
try
ブロック内のstream
変数を宣言して作成しました。コンパイラが再び揺らぎました -stream
変数がfinally
ブロックの範囲外です。
私はこの問題を回避するために、ブロックの上にstream
と宣言し、nullに初期化しています。
これは機能します。しかし、ちょうど私のJavaのスキルがどのように私は尋ねると思ったかと思う:正しい方法は、このようなコードを書くにはありますか?
あなたはまだ少ないコード – zencv
、いくつかの砂糖onwards..JustのJava 7でのリソースと試みる使用することができますhttp://docs.oracle.com/javase/tutorial/essential/exceptions /tryResourceClose.html –