ビデオ: 【コマンド】建築に便利なコマンド教えます。[番外編][PC][java] 2024
2つの異なるファイルまたは
Scanner
とディスクから入力を取得するJavaプログラムを想像してくださいファイル。正しくクリーンアップするためには、
近い
メソッド呼び出しを
finally
節に置きます。
import java。 io。ファイル;
import java。 io。 IOException;
import java。 util。スキャナ;
public class Main {
スキャナscan1 = null;
スキャナscan2 =ヌル。
try {
scan1 =新しいスキャナ(新しいファイル( "File1。txt"));
scan2 =新しいスキャナ(新しいファイル( "File2。txt"));
//有用なものを行う
} catch(IOException e){
<! - 2 - >
} finally {
scan1。閉じる();
scan2。閉じる();
システム。でる。 println( "完了!");理論上、コンピュータは常に
scan1を実行する。 close()
および
scan2。
try
節の実行中に何が問題になっても、close()
しかしそれは理論です。実際には、別のプログラマー(もちろんあなたではない)が
try
節の真ん中で
scan1
を閉じることによってコードを修正するかもしれません:
<! - 3 - >
try {
scan1 =新しいスキャナ(新しいファイル( "File1。txt"));
scan2 =新しいスキャナ(新しいファイル( "File2。txt"));
//便利なことをするだけでなく、…
scan1 = null;
} catch(IOException e){
//おっと!
} finally {
scan1。閉じる();
scan2。閉じる();
システム。でる。 println( "完了!");
}
<! - 1 - >
今あなたは本当の苦境を抱えています。
finally
節の中で、
scan1
null
です。
scan1への呼び出し。 close()
は失敗するので、プログラムは
NullPointerException
をスローし、
scan2の呼び出しに達する前に実行を停止します。 close()
最悪の場合、
scan2
は閉じられず、プログラムには
File2があります。 txt
は他のプログラムがファイルを使用できないようにロックアップされています。
<!プログラムがいくつかのリソース(多くのファイル、データベース、ファイルなど)を使用する場合、
try
文のビルドは非常に複雑になります。
catch
節とあらゆる種類のクレイジーな組み合わせの中で
することができます。しかし、Javaでは問題を解決するためのより良い方法があります。Java 7(およびそれ以降のバージョンのJava)では、
のtry-with-resourcesステートメントを作成できます。
このコードは、どのようにあなたを示しています。
<! - 3 - >
import java。 io。ファイル;
import java。 io。 IOException;
import java。 util。スキャナ; public class NewMain { public static void main(String args []){ try(スキャナのスキャン1 =新しいスキャナ(新しいFile( "File1。
catch(IOException e){
//Oops( "txt")));
スキャナーscan2 =新しいスキャナーこのコードでは、
scan1
と
の宣言は、
scan1
と
try
という単語の後に括弧で囲まれています。カッコで囲まれた宣言は、
のステートメントの実行後に自動的に
scan1
と
scan2 < >
try
節の括弧の中にいくつかのリソースを宣言することができますが、Javaは
try
節の文の実行後に自動的にすべてのリソースを閉じます。必要に応じて
catch
句と
finally
句を追加して、あらゆる種類のリソース(ファイル、データベース、サーバへの接続など)にアクセスし、 Javaは接続を自動的に切断します。
人生は良いです。