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