Java スローとスロー
Java スローとスロー
このチュートリアルでは、例を使用して例外処理に throw および throws キーワードを使用する方法を学習します。
Java では、例外は次の 2 つのタイプに分類できます。
- チェックされていない例外: これらはコンパイル時ではなく実行時にチェックされます。例:
ArithmeticException、NullPointerException、ArrayIndexOutOfBoundsException、Error未満の例外 クラスなど - チェック済み例外: それらはコンパイル時にチェックされます。例:
IOException、InterruptedExceptionなど
チェックされた例外とチェックされていない例外の詳細については、Java 例外を参照してください。
通常、未チェックの例外を処理する必要はありません。これは、プログラミング エラーにより未チェックの例外が発生するためです。また、それらを処理する代わりに修正することをお勧めします。
このチュートリアルでは、throw を使用してチェック例外を処理する方法に焦点を当てます。 と throws .
Java throws キーワード
throws を使用します
その構文は次のとおりです:
accessModifier returnType methodName() throws ExceptionType1, ExceptionType2 … {
// code
}
上記の構文からわかるように、 throws を使用できます 複数の例外を宣言します。
例 1:Java がキーワードをスローする
import java.io.*;
class Main {
public static void findFile() throws IOException {
// code that may produce IOException
File newFile=new File("test.txt");
FileInputStream stream=new FileInputStream(newFile);
}
public static void main(String[] args) {
try{
findFile();
} catch(IOException e){
System.out.println(e);
}
}
}
出力
java.io.FileNotFoundException: test.txt (No such file or directory)
このプログラムを実行すると、ファイル test.txt 存在しません、FileInputStream FileNotFoundException をスローします IOException を拡張します クラス。
メソッドが例外を処理しない場合、メソッド内で発生する可能性のある例外の種類を throws で指定する必要があります。 コールスタックのさらに上のメソッドがそれらを処理したり、 throws を使用してそれらを指定したりできるようにする句
findFile() メソッドは IOException 投げることができます。 main() メソッドはこのメソッドを呼び出し、例外がスローされた場合はそれを処理します。
複数の例外のスロー
throws を使用して複数の例外をスローする方法を次に示します。 キーワード。
import java.io.*;
class Main {
public static void findFile() throws NullPointerException, IOException, InvalidClassException {
// code that may produce NullPointerException
… … …
// code that may produce IOException
… … …
// code that may produce InvalidClassException
… … …
}
public static void main(String[] args) {
try{
findFile();
} catch(IOException e1){
System.out.println(e1.getMessage());
} catch(InvalidClassException e2){
System.out.println(e2.getMessage());
}
}
}
ここでは、findFile() メソッドは NullPointerException をスローできることを指定します 、 IOException 、および InvalidClassException その throws で
NullPointerException を処理していないことに注意してください .これは、未チェックの例外であるためです。 throws で指定する必要はありません。
キーワード Vs をスローします。試して...キャッチ...最後に
例外の原因となるメソッドがいくつかある場合があります。 try...catch を書いています 各メソッドは退屈で、コードが長くなり、読みにくくなります。
throws 現在のメソッドでキャッチしたくない例外 (処理する必要がある例外) をチェックした場合にも役立ちます。
Java スロー キーワード
throw キーワードは、単一の例外を明示的にスローするために使用されます。
例外がスローされると、プログラム実行の流れは try から移行します。 catch へのブロック ブロック。 throw を使用します メソッド内のキーワード。
その構文は次のとおりです:
throw throwableObject;
スロー可能なオブジェクトはクラス Throwable のインスタンスです または Throwable のサブクラス クラス。
例 2:Java スロー キーワード
class Main {
public static void divideByZero() {
throw new ArithmeticException("Trying to divide by 0");
}
public static void main(String[] args) {
divideByZero();
}
}
出力
Exception in thread "main" java.lang.ArithmeticException: Trying to divide by 0
at Main.divideByZero(Main.java:3)
at Main.main(Main.java:7)
exit status 1
この例では、明示的に ArithmeticException. をスローしています。
注: ArithmeticException 未チェックの例外です。通常、未チェックの例外を処理する必要はありません。
例 3:チェック例外のスロー
import java.io.*;
class Main {
public static void findFile() throws IOException {
throw new IOException("File not found");
}
public static void main(String[] args) {
try {
findFile();
System.out.println("Rest of code in try block");
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
出力
File not found
findFile() メソッドは IOException をスローします コンストラクターに渡したメッセージと共に。
これはチェック例外であるため、throws で指定する必要があることに注意してください。
この findFile() を呼び出すメソッド メソッドは、この例外を処理するか、throws を使用して指定する必要があります
main でこの例外を処理しました () 方法。 try からのプログラム実行の流れ catch までブロック 例外がスローされたときにブロックします。したがって、try の残りのコードは ブロックはスキップされ、catch 内のステートメント ブロックが実行されます。
Java