Java – 例外を発生させるthrowsとは?throwとの違いも解説
throws
は、メソッドが例外をスローする可能性があることを宣言するために使用されます。
一方、throw
は実際に例外を発生させるために使用されます。
throws
はメソッドシグネチャで使用され、複数の例外をカンマで区切って指定可能です。
throw
はメソッド内で例外オブジェクトを生成してスローします。
throwsとは何か
Javaにおけるthrows
は、メソッドが例外をスローする可能性があることを示すためのキーワードです。
これにより、メソッドを呼び出す側は、どのような例外が発生する可能性があるかを事前に知ることができ、適切なエラーハンドリングを行うことができます。
throws
は、主にチェック例外(Checked Exception)に対して使用されます。
チェック例外は、コンパイル時に処理が強制されるため、プログラマはこれを考慮する必要があります。
以下に、throws
を使用したサンプルコードを示します。
import java.io.FileReader;
import java.io.IOException;
public class App {
public static void main(String[] args) {
try {
readFile("example.txt"); // ファイルを読み込むメソッドを呼び出す
} catch (IOException e) {
// IOExceptionが発生した場合の処理
System.out.println("ファイルの読み込み中にエラーが発生しました: " + e.getMessage());
}
}
// throwsを使ってIOExceptionを宣言
public static void readFile(String fileName) throws IOException {
FileReader fileReader = new FileReader(fileName); // ファイルを開く
// ファイルの読み込み処理
fileReader.close(); // ファイルを閉じる
}
}
このコードでは、readFileメソッド
がIOException
をスローする可能性があることを示しています。
呼び出し元のmainメソッド
では、try-catch
ブロックを使用して、例外が発生した場合の処理を行っています。
出力結果は以下の通りです(ファイルが存在しない場合):
ファイルの読み込み中にエラーが発生しました: example.txt (そのようなファイルはありません)
このように、throws
を使用することで、メソッドがスローする可能性のある例外を明示的に示し、呼び出し元でのエラーハンドリングを容易にします。
throwsとthrowの違い
Javaにおけるthrows
とthrow
は、どちらも例外処理に関連するキーワードですが、役割や使い方が異なります。
以下にその違いを詳しく説明します。
キーワード | 説明 | 使用例 |
---|---|---|
throws | メソッドが例外をスローする可能性を宣言するために使用される。 | public void myMethod() throws IOException { ... } |
throw | 実際に例外をスローするために使用される。 | throw new IOException("エラーメッセージ"); |
throwsの詳細
throws
はメソッドのシグネチャに記述され、メソッドがスローする可能性のある例外を宣言します。- これにより、メソッドを呼び出す側は、どの例外が発生するかを把握し、適切なエラーハンドリングを行うことができます。
- 主にチェック例外に対して使用されます。
throwの詳細
throw
は、実際に例外を発生させるために使用されます。- 例外オブジェクトを生成し、それをスローすることで、プログラムの実行を中断し、例外処理に移行します。
- どのような例外でも使用可能ですが、通常はチェック例外やランタイム例外に対して使われます。
以下に、throws
とthrow
を使用したサンプルコードを示します。
import java.io.FileReader;
import java.io.IOException;
public class App {
public static void main(String[] args) {
try {
readFile("example.txt"); // ファイルを読み込むメソッドを呼び出す
} catch (IOException e) {
// IOExceptionが発生した場合の処理
System.out.println("ファイルの読み込み中にエラーが発生しました: " + e.getMessage());
}
}
// throwsを使ってIOExceptionを宣言
public static void readFile(String fileName) throws IOException {
if (fileName == null) {
// throwを使って例外をスロー
throw new IOException("ファイル名がnullです"); // 例外を発生させる
}
FileReader fileReader = new FileReader(fileName); // ファイルを開く
// ファイルの読み込み処理
fileReader.close(); // ファイルを閉じる
}
}
このコードでは、readFileメソッド
がthrows
を使ってIOException
を宣言し、throw
を使って実際に例外をスローしています。
これにより、メソッドの呼び出し元で例外を適切に処理することができます。
まとめ
この記事では、Javaにおけるthrows
とthrow
の違いについて詳しく解説しました。
throws
はメソッドがスローする可能性のある例外を宣言するために使用され、throw
は実際に例外を発生させるために用いられます。
これらのキーワードを正しく使い分けることで、より効果的なエラーハンドリングが可能になります。
今後は、例外処理を適切に行うために、これらの概念を実際のプログラミングに活かしてみてください。