Java トライ...キャッチ
Java try...catch
このチュートリアルでは、例を使用して Java の try catch ステートメントについて学習します。
try...catch Java のブロックは、例外を処理するために使用され、プログラムの異常終了を防ぎます。
try...catch の構文は次のとおりです。 Java でブロックします。
try{
// code
}
catch(exception) {
// code
}
try ブロックには、例外を生成する可能性のあるコードが含まれています。
catch ブロックには、try 内で例外が発生したときに実行されるコードが含まれます。 ブロックします。
例:Java の try...catch ブロック
class Main {
public static void main(String[] args) {
try {
int divideByZero = 5 / 0;
System.out.println("Rest of code in try block");
}
catch (ArithmeticException e) {
System.out.println("ArithmeticException => " + e.getMessage());
}
}
} 出力
ArithmeticException => / by zero
上記の例では、
int divideByZero = 5 / 0;
ここでは、数値を ゼロ で割ろうとしています .この場合、例外が発生します。したがって、このコードを try で囲みました。 ブロックします。
プログラムがこのコードに遭遇すると、 ArithmeticException 発生します。そして、例外は catch によってキャッチされます catch 内のコードをブロックして実行します ブロックします。
catch ブロックは try 内に例外が存在する場合にのみ実行されます ブロックします。
注意 :Java では、try を使用できます。 catch のないブロック ブロック。ただし、catch は使用できません。 try のないブロック ブロックします。
Java の試行...最終的にブロック
try も使用できます finally ブロックと一緒にブロックします。
この場合、try ブロック内に例外があるかどうかにかかわらず、finally ブロックは常に実行されます。
例:Java try...finally ブロック
class Main {
public static void main(String[] args) {
try {
int divideByZero = 5 / 0;
}
finally {
System.out.println("Finally block is always executed");
}
}
} 出力
Finally block is always executed
Exception in thread "main" java.lang.ArithmeticException: / by zero
at Main.main(Main.java:4)
上記の例では、try を使用しています。 finally とともにブロックします ブロック。 try 内のコードが ブロックが例外を引き起こしています。
ただし、 finally 内のコードは ブロックは例外に関係なく実行されます。
Java try...catch...finally ブロック
Java では、try...catch の後に finally ブロックを使用することもできます。 ブロック。たとえば、
import java.io.*;
class ListOfNumbers {
// create an integer array
private int[] list = {5, 6, 8, 9, 2};
// method to write data from array to a fila
public void writeList() {
PrintWriter out = null;
try {
System.out.println("Entering try statement");
// creating a new file OutputFile.txt
out = new PrintWriter(new FileWriter("OutputFile.txt"));
// writing values from list array to Output.txt
for (int i = 0; i < 7; i++) {
out.println("Value at: " + i + " = " + list[i]);
}
}
catch (Exception e) {
System.out.println("Exception => " + e.getMessage());
}
finally {
// checking if PrintWriter has been opened
if (out != null) {
System.out.println("Closing PrintWriter");
// close PrintWriter
out.close();
}
else {
System.out.println("PrintWriter not open");
}
}
}
}
class Main {
public static void main(String[] args) {
ListOfNumbers list = new ListOfNumbers();
list.writeList();
}
} 出力
Entering try statement Exception => Index 5 out of bounds for length 5 Closing PrintWriter
上記の例では、list という名前の配列を作成しました。 output.txt という名前のファイル .ここでは、配列からデータを読み取り、ファイルに保存しようとしています。
コードに注目してください。
for (int i = 0; i < 7; i++) {
out.println("Value at: " + i + " = " + list[i]);
}
ここで、配列のサイズは 5 です 配列の最後の要素は list[4] にあります .ただし、a[5] の要素にアクセスしようとしています。 と a[6] .
したがって、コードは catch ブロックによってキャッチされる例外を生成します。
finally 以降 ブロックは常に実行されます。PrintWriter を閉じるコードが含まれています。 finally ブロック内。
ファイルや接続を閉じるなどの重要なクリーンアップ コードを含めるには、finally ブロックを使用することをお勧めします。
注意 :finally ブロックは実行されません:
System.exit()の使用 メソッドfinallyで例外が発生します ブロック- スレッドの死
複数のキャッチ ブロック
try ごとに ブロック、0 個以上の catch が存在する可能性があります ブロック。複数の catch ブロックを使用すると、各例外を異なる方法で処理できます。
各 catch の引数の型 block は、それによって処理できる例外のタイプを示します。たとえば、
class ListOfNumbers {
public int[] arr = new int[10];
public void writeList() {
try {
arr[10] = 11;
}
catch (NumberFormatException e1) {
System.out.println("NumberFormatException => " + e1.getMessage());
}
catch (IndexOutOfBoundsException e2) {
System.out.println("IndexOutOfBoundsException => " + e2.getMessage());
}
}
}
class Main {
public static void main(String[] args) {
ListOfNumbers list = new ListOfNumbers();
list.writeList();
}
} 出力
IndexOutOfBoundsException => Index 10 out of bounds for length 10
この例では、arr という名前の整数配列を作成しました。 サイズ 10 .
配列のインデックスは 0 から始まるため 、配列の最後の要素は arr[9] にあります .声明に注目してください、
arr[10] = 11;
ここでは、インデックス 10 に値を割り当てようとしています .したがって、IndexOutOfBoundException
try で例外が発生した場合 ブロック、
- 例外は最初の
catchにスローされます ブロック。最初のcatchブロックはIndexOutOfBoundsExceptionを処理しません なので、次のcatchに渡されます ブロックします。 - 2 番目の
catch上記の例のブロックは、IndexOutOfBoundsExceptionを処理するため、適切な例外ハンドラーです。 .したがって、実行されます。
複数の例外のキャッチ
Java SE 7 以降では、1 つの catch で複数の種類の例外をキャッチできるようになりました。 ブロックします。
これにより、コードの重複が減り、コードの簡素化と効率が向上します。
catch で処理できる各例外タイプ ブロックは縦棒 | で区切られています .
その構文は次のとおりです:
try {
// code
} catch (ExceptionType1 | Exceptiontype2 ex) {
// catch block
} 詳細については、複数の例外をキャッチする Java を参照してください。
Java try-with-resources ステートメント
試用リソース statement は、1 つ以上のリソース宣言を持つ try ステートメントです。
その構文は次のとおりです:
try (resource declaration) {
// use of the resource
} catch (ExceptionType e1) {
// catch block
} リソースは、プログラムの最後に閉じられるオブジェクトです。これは、try ステートメントで宣言および初期化する必要があります。
例を見てみましょう。
try (PrintWriter out = new PrintWriter(new FileWriter("OutputFile.txt")) {
// use of the resource
} 試用リソース このステートメントは、自動リソース管理とも呼ばれます .このステートメントは、ステートメントの最後ですべてのリソースを自動的に閉じます。
詳細については、Java の try-with-resources ステートメントを参照してください。
Java