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

2022年8月8日

Javaの例外処理throwsの使い方
shin

シン

フリーランスエンジニア。Java(SpringBoot)。Oracle認定Java Gold保有。全日本SEO協会認定SEOスペシャリスト。SEO検定全級保有。プログラミング、エンジニア、SEO情報を発信。大阪在住

「Javaを勉強しているのだけど、例外処理のthrowsがよくわからないなぁ。throwとどう違うの?使い方をわかりやすく教えて欲しい」

こんな疑問にお答えします。

本記事では、Javaの例外処理「throws」の使い方について解説します。

僕は現役のフリーランスエンジニアです。Javaを使った開発をしており、Javaの資格も保有しています。それらの知見を元に、丁寧に解説していきますね。

この記事をお読みいただくことで、throwsについての理解が深まりますよ。

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エンジニアを目指している方は読んでみてください。

  • この記事を書いた人
shin

シン

フリーランスエンジニア。Java(SpringBoot)。Oracle認定Java Gold保有。全日本SEO協会認定SEOスペシャリスト。SEO検定全級保有。プログラミング、エンジニア、SEO情報を発信。大阪在住