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