0
0

throw / throws 

Posted at

"Throw"の和訳は「投げる」
javaにおいて、

  1. throwは、意図的に例外を発生させたい場合などに使う
  2. throwsは、メソッドの呼び出した側に例外処理を投げる

参考にしたサイト:
【Java初心者向け】throwとthrowsの違いとその使い方

throw

コード上、入力された値に問題はないが、意図して例外処理を発生させたい場面に使う。
以下は、整数の値である19を渡しているので問題はないけれど、if文で20未満の値が入力された場合は例外処理を発生させている。
この際の例外クラスは、「メソッドの引数に不正な引数が渡された場合」に例外を発生させるIllegalArgumentExceptionを使用する。

Throw 実装例
public class Exception_Test5 {

	public static void main(String[] args) {
		// 年齢を表す変数age
		int age = 19;
        // 20未満の整数の場合は例外を発生
		if (age < 20) {
			throw new IllegalArgumentException ( age + "歳の方には非対応です。");
		}
				
	}

}
実行結果

Exception in thread "main" java.lang.IllegalArgumentException: 19歳の方には非対応です

ちなみに文字列でもいける。

特定の文字列ABCに対して入力には例外処理
public class Exception_Test5 {

	public static void main(String[] args) {
		// 文字列
		String words = "ABC";
		// ABCという文字列は例外処理
		if (words == "ABC") {
			throw new IllegalArgumentException ( words + "は非対応な文字列です。");
		}
				
	}

}

実行結果
スクリーンショット 2024-02-19 14.23.39.png

throws

メソッドの呼び出し元で例外処理を行う

今回の「throws」キーワードをメソッドの定義に追加することにより、例外処理を「そのメソッドの中ではなく、そのメソッドを呼び出した別の箇所」に任せるということが可能になります。
すなわち、「throws」キーワードをつけて定義されたメソッドを呼び出す際には、呼び出す処理を書く部分で例外処理のコードを書かなければならない

引用元【はじめてのJava】例外を逃れる【例外処理編】

tyr-catch文はその場で(メソッド内で)例外処理を行い、
throwsはそのメソッドを呼び出した先で例外処理を行う。

《実践してみる》
下記通り通常通りメソッドを作成する。
下記で指定しているファイルは存在していないのでエラーになるはずです。
しかし、例外処理は含まれていません。

ファイルを読み込むメソッド method1を作成する
	static void method1() {
		// Scannerオブジェクトを作成してファイルを読み込むメソッド
		Scanner scanner = new Scanner(new File("test.txt"));
		
		//ファイルの読み込みが続く場合、処理を続ける
		while (scanner.hasNext()) {
			//改行までの入力を受け取る
			String input = scanner.nextLine();
			System.out.println(input);
		}
	}

次に、mainメソッドにて、このmethod1を呼び出して使いたいとします。
その際にはまず、throws 例外処理のクラス名を以下画像のようにメソッド名の後ろに追記。
スクリーンショット 2024-02-19 17.15.19.png
そしてmainメソッドではtry-catch文にて、method1をtryし、例外処理をcatchする。

mainメソッド
public static void main(String[] args) {
   	try {
   		method1();
   	} catch (FileNotFoundException e) {
                 //ファイルが見つからない場合に行う処理
   		System.out.println("ファイルが見つかりません");
   	}
   }

以下、実行結果
スクリーンショット 2024-02-19 17.21.43.png
きちんと、例外処理が行なわれている。

throw文を追記しない場合は、FileNotFoundExceptionのエラーとなる。
スクリーンショット 2024-02-19 17.26.54.png

0
0
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
0
0