LoginSignup
1
4

More than 1 year has passed since last update.

【Java】throwとthrowsの使い方を簡潔に説明してみる

Last updated at Posted at 2022-08-27

はじめに

今回の記事はthrow、throwsの解説を簡潔に書くことを目的としているため、検査例外・非検査例外とは何か等の細かい内容は省かせていただきます。お許しを。

実行環境

OS:Windows10 バージョン20H2
言語:Java 8
使用ツール:Spring Tool Suite 4

1. throw

1-1. throwとは

例外を意図的に起こすことが出来る処理のこと。

1-2. 使い方

throw new 例外クラス名();

1-3. 使用例

Sample.java
public class Sample {
	public void hello(String name) {
		if (name == null) {
			throw new IllegalArgumentException();
		}
		System.out.println(name + "さん、こんにちは!");	
	}
}
Main.java
public class Main {
	public static void main(String[] args) {
		Sample s = new Sample();
		s.hello(null);
	}
}
実行結果
Exception in thread "main" java.lang.IllegalArgumentException

何らかの名前(文字列)を受け取ったら「こんにちは!〇〇さん!」と画面に表示するhelloメソッドを作るとします。

しかしこの場合helloメソッドの引数にnullを渡したとしても、「こんにちは!nullさん!」と表示されてしまいます。

そこで、Sampleクラスにて「もしnameの値がnullだった場合、throwを用いてIllegalArgumentExceptionという非検査例外を発生させる」というプログラムを組み、例外を意図的に発生させています。

Main.java
public class Main {
	public static void main(String[] args) {
		Sample s = new Sample();
		try {
			s.hello(null);
		} catch (IllegalArgumentException e){
			System.out.println("名前が空です!");
		}
	}
}
実行結果
名前が空です!

try-catchを用いることで、上記のコードのように意図的に起こした例外に対して処理を組むことも可能です。

2. throws

2-1. throwsとは

メソッド内でスローする可能性のある例外を宣言する処理のこと。

※ 扱う例外が先程のthrowの例のように、非検査例外IllegalArgumentExceptionNullPointerExceptiont等)であれば、throwsは記述しなくても良いのですが、 検査例外IOException SQLException等)であればthrowsを宣言する必要があります。

2-2. 使い方

メソッド名() throws 例外クラス名{}
(複数例外を宣言する場合は、メソッド名() throws 例外クラス名 , 例外クラス名{})

2-3. 使用例

Sample.java
public class Sample {
   public void hello(String name) throws Exception {
   	
   	if ("".equals(name)) {
   		throw new Exception();
   	}
   	
   	if (name == null) {
   		throw new IllegalArgumentException();
   	}
   	
   	System.out.println(name + "さん、こんにちは!");	
   }
}
Main.java
public class Main {
	public static void main(String[] args) {
		Sample s = new Sample();
		try {
			s.hello("");
		} catch (IllegalArgumentException e){
			System.out.println("名前が空です!");
		} catch (Exception e) {
			System.out.println("名前を入力して下さい!");
		}
	}
}
実行結果
名前を入力してください!

先程のSampleクラスに「もしnameの値が""だった場合、throwを用いてExceptionという例外を発生させる」という記述を追加しています。

Exception検査例外であるため、helloメソッドthrowsを宣言し、更にMainクラス内でcatch文に例外をスロー(投げる)しなければいけません。しないとコンパイルエラーが起こります。

ちなみに、この場合IllegalArgumentException非検査例外なのでthrowsで宣言していません。

Sample.java
 public class Sample {
	public void hello(String name) throws Exception, IllegalArgumentException{}

もちろんこのような形で、非検査例外throwsで宣言することもできます。

参考資料

↓ こちらの方の動画を非常に参考にさせていただきました

↓ Exception公式ドキュメント

↓ 検査例外と非検査例外に関する記事

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4