Javaのtryブロック
ジャワ 試す ブロックは、例外をスローする可能性のあるコードを囲むために使用されます。メソッド内で使用する必要があります。
try ブロック内の特定のステートメントで例外が発生した場合、ブロック コードの残りの部分は実行されません。したがって、例外をスローしない try ブロック内にコードを保持しないことをお勧めします。
Java try ブロックの後には、catch ブロックまたはfinally ブロックが続く必要があります。
Javaのtry-catchの構文
try{ //code that may throw an exception }catch(Exception_class_Name ref){}
try-finally ブロックの構文
try{ //code that may throw an exception }finally{}
Javaキャッチブロック
Java catch ブロックは、パラメータ内で例外の種類を宣言することで例外を処理するために使用されます。宣言された例外は、親クラス例外 (つまり、Exception) または生成された例外タイプである必要があります。ただし、生成された例外のタイプを宣言するのが良い方法です。
ジャッカル対オオカミ
catch ブロックは、try ブロックの後にのみ使用する必要があります。 1 つの try ブロックで複数の catch ブロックを使用できます。
Java try-catch ブロックの内部動作
JVM はまず、例外が処理されたかどうかを確認します。例外が処理されない場合、JVM は次のタスクを実行するデフォルトの例外ハンドラーを提供します。
- 例外の説明を出力します。
- スタック トレース (例外が発生したメソッドの階層) を出力します。
- プログラムを終了させます。
しかし、アプリケーション プログラマが例外を処理した場合、アプリケーションの通常のフローは維持されます。つまり、コードの残りの部分が実行されます。
例外処理のない問題
try-catch ブロックを使用しない場合の問題を理解してみましょう。
例1
TryCatchExample1.java
public class TryCatchExample1 { public static void main(String[] args) { int data=50/0; //may throw exception System.out.println('rest of the code'); } }今すぐテストしてください
出力:
Exception in thread 'main' java.lang.ArithmeticException: / by zero
上の例に示されているように、 コードの残りの部分 は実行されません(その場合、 コードの残りの部分 ステートメントは出力されません)。
例外の後には 100 行のコードが存在する可能性があります。例外が処理されない場合、例外の下にあるすべてのコードは実行されません。
例外処理による解決
Javaのtry-catchブロックによる上記の問題の解決策を見てみましょう。
例 2
TryCatchExample2.java
public class TryCatchExample2 { public static void main(String[] args) { try { int data=50/0; //may throw exception } //handling the exception catch(ArithmeticException e) { System.out.println(e); } System.out.println('rest of the code'); } }今すぐテストしてください
出力:
CSSテキストの整列
java.lang.ArithmeticException: / by zero rest of the code
上の例に示されているように、 コードの残りの部分 実行されます。つまり、 コードの残りの部分 ステートメントが印刷されます。
例 3
この例では、例外をスローしない try ブロック内にコードも保持しています。
TryCatchExample3.java
public class TryCatchExample3 { public static void main(String[] args) { try { int data=50/0; //may throw exception // if exception occurs, the remaining statement will not exceute System.out.println('rest of the code'); } // handling the exception catch(ArithmeticException e) { System.out.println(e); } } }今すぐテストしてください
出力:
java.lang.ArithmeticException: / by zero
ここでは、try ブロックで例外が発生した場合、ブロック コードの残りの部分は実行されないことがわかります。
例 4
ここでは、親クラスの例外を使用して例外を処理します。
TryCatchExample4.java
public class TryCatchExample4 { public static void main(String[] args) { try { int data=50/0; //may throw exception } // handling the exception by using Exception class catch(Exception e) { System.out.println(e); } System.out.println('rest of the code'); } }今すぐテストしてください
出力:
java.lang.ArithmeticException: / by zero rest of the code
例5
例外時にカスタム メッセージを出力する例を見てみましょう。
TryCatchExample5.java
public class TryCatchExample5 { public static void main(String[] args) { try { int data=50/0; //may throw exception } // handling the exception catch(Exception e) { // displaying the custom message System.out.println('Can't divided by zero'); } } }今すぐテストしてください
出力:
Can't divided by zero
例6
catch ブロックで例外を解決する例を見てみましょう。
TryCatchExample6.java
public class TryCatchExample6 { public static void main(String[] args) { int i=50; int j=0; int data; try { data=i/j; //may throw exception } // handling the exception catch(Exception e) { // resolving the exception in catch block System.out.println(i/(j+2)); } } }今すぐテストしてください
出力:
25
例 7
この例では、try ブロックに加えて、例外コードも catch ブロックで囲みます。
TryCatchExample7.java
public class TryCatchExample7 { public static void main(String[] args) { try { int data1=50/0; //may throw exception } // handling the exception catch(Exception e) { // generating the exception in catch block int data2=50/0; //may throw exception } System.out.println('rest of the code'); } }今すぐテストしてください
出力:
Exception in thread 'main' java.lang.ArithmeticException: / by zero
ここで、catch ブロックに例外コードが含まれていないことがわかります。したがって、例外コードを try ブロック内に囲み、catch ブロックを例外の処理のみに使用します。
例8
この例では、生成された例外 (Arithmetic Exception) を別の種類の例外クラス (ArrayIndexOutOfBoundsException) で処理します。
TryCatchExample8.java
public class TryCatchExample8 { public static void main(String[] args) { try { int data=50/0; //may throw exception } // try to handle the ArithmeticException using ArrayIndexOutOfBoundsException catch(ArrayIndexOutOfBoundsException e) { System.out.println(e); } System.out.println('rest of the code'); } }今すぐテストしてください
出力:
Exception in thread 'main' java.lang.ArithmeticException: / by zero
例9
別の未チェック例外を処理する例を見てみましょう。
TryCatchExample9.java
public class TryCatchExample9 { public static void main(String[] args) { try { int arr[]= {1,3,5,7}; System.out.println(arr[10]); //may throw exception } // handling the array exception catch(ArrayIndexOutOfBoundsException e) { System.out.println(e); } System.out.println('rest of the code'); } }今すぐテストしてください
出力:
Javaのループの終了
java.lang.ArrayIndexOutOfBoundsException: 10 rest of the code
例 10
チェック例外を処理する例を見てみましょう。
TryCatchExample10.java
import java.io.FileNotFoundException; import java.io.PrintWriter; public class TryCatchExample10 { public static void main(String[] args) { PrintWriter pw; try { pw = new PrintWriter('jtp.txt'); //may throw exception pw.println('saved'); } // providing the checked exception handler catch (FileNotFoundException e) { System.out.println(e); } System.out.println('File saved successfully'); } }今すぐテストしてください
出力:
File saved successfully