Javaの例外処理throwsの使い方は?throwとの違いもわかりやすく解説

Javaを勉強しているのだけど、例外処理のthrowsがよくわからないなぁ。throwとどう違うの?使い方をわかりやすく教えて欲しい。
こんな疑問にお答えします。
この記事で解説する「Javaのthrowsの使い方」をお読みいただくことで、throwsについての理解が深まりますよ。

僕は現役のフリーランスエンジニアです。Javaを使った開発をしており、Javaの資格も保有しています。それらの知見を元に、丁寧に解説していきますね!
Javaエンジニアとしてスキルアップするためにも、ぜひ最後まで読んでみてください。
Javaの例外処理throwsとは
基本的な「Javaのthrowsとは何か?」から「throwsとthrowの違い」についてもみていきましょう。
- throwsとは
- throws 必要性とは
- throwsとthrowsの違い
throwsとは
Javaのthrowsとは、メソッド内で例外が発生した時に、呼び出し元に例外処理を投げられる方法です。「throw」は「投げる」という意味でもあるので、「例外処理を投げる時に使うものなんだな」と覚えると良いでしょう。
throwsの基本的な書き方は、以下の通り。
アクセス修飾子 戻り値 メソッド名() throws 例外 {}
public void sampleA() throws FileNotFoundException {}
throwsの必要性とは
throwsは、例外処理を別のメソッドで行いたい場合や、複数の例外処理を1つのメソッドでまとめて行いたい場合に使えます。一般的に例外処理は「throw」を書いてtry-catch文で処理を行えます。
しかし、メソッドが複数ある場合、例外処理をしたいとなると各メソッドでthrowを書かなければなりません。そこでthrowsを使えば、例外処理をまとめて行うことができるので、コードの可読性が上がります。
戻り値 メソッド名() throws 例外, 例外{}
throwsは実際の現場ではあまり使われることはありませんが、いざという時のために覚えておいて損はないでしょう。詳しい使い方などは後ほど解説していきます。
throwsとthrowsの違い
Javaの例外処理には、throwsの他にthrowがあります。throwsとthrowは似ていますが、処理内容が違います。以下は2つの違いです。
- throwsは、例外処理を受け取るメソッド側で処理ができる。メソッドのシグニチャの右側に「throws 例外」を記述する。複数の例外をまとめて書くことができる。
- throwは、プログラマーが意図的に例外を発生させる。throw new 例外();を記述する。
Javaのthrowsとthrowの使い方をわかりやすく解説
throwsとthrowは書き方が異なります。2つの使い方をみてみましょう。
- throwsの使い方・書き方
- throwの使い方・書き方
throwsの使い方・書き方
throwsは定義したメソッド内で例外が発生した場合、別のメソッドでその例外処理を受け取り、処理を行えます。たとえば、以下は「throws」のサンプルコードです。
import java.io.FileNotFoundException;
import java.io.FileReader;
public class Sample {
public void sampleA() throws FileNotFoundException {
FileReader file = new FileReader("sample.txt");
System.out.println("sample.txtの読み込みに成功しました");
}
public void sampleB() {
try {
sampleA();
} catch(FileNotFoundException e) {
System.out.println("sample.txtが存在しませんでした");
}
}
}
上記はsampleAメソッドの右側に「throws FileNotFoundException」を記述しています。このメソッド内で例外が発生した場合、sampleBメソッドのtry-catchでキャッチされます。
もしファイルが存在すれば読み込みに成功し、存在しなければcatchされて「sample.txtが存在しませんでした」と表示されます。
throwsは、定義したメソッド自身ではなく、別のメソッドで例外処理を実施したい場合にも使えます。
throwの使い方・書き方
throwはプログラマが意図的に例外を発生させられます。ある条件と一致する場合に例外を発生させ、エラーメッセージを表示できます。たとえば、以下は年齢の数値を受け取るメソッドです。
public void sampleC(int age) {
if(age < 0) {
throw new IllegalArgumentException(“引数の値が不正です”);
}
}
上記は年齢の値が0より小さかった場合、「IllegalArgumentException」の例外を投げる処理をしています。まず、年齢が0より小さくなることはないので、例外を発生させるようにしています。throwは例外を発生させたい任意の箇所に記述することで、例外処理を実施できます。
Javaのthrowsの複数の書き方
throwsは複数の例外処理を記述できます。書き方は以下の通り。
public static void readFile(String path) throws FileNotFoundException,NullPointerException {
FileReader file = new FileReader(“”c:\\test\\sample.txt””);
}
throwsの後にカンマ「,」で区切って2つの例外を記述することで、複数の例外処理に対応できます。上記の場合ですと、もしファイルが存在しなかった場合は「FileNotFoundException」が発動し、ファイルがnullだったら「NullPointerException」が発生します。
Javaのthrowsとthrowの使い方:まとめ
Javaの例外処理throwsとthrowの違いや使い方について解説しました。
throwsは例外処理を呼び出し元のメソッドで行いたい場合、また、複数の例外処理をまとめて行いたい場合に有効です。throwは、プログラマが意図的に例外を発生させ、エラーメッセージを返したい場合に使えます。例外処理は実務でもよく目にする機会があると思いますので、ぜひ覚えてみてください。
以下ではJavaエンジニアになるための学習ロードマップを解説していますので、Javaエンジニアを目指している方は読んでみてください!
