【Java入門(4)API活用・例外処理 #5】throws・throw

 

みのる
こんにちは。笑顔で感謝!✨ みのるコーチです。
今回も、ご覧いただき、ありがとうございます。

今回は…

Java入門4 API活用・例外処理 #5
throws宣言
throw命令

というテーマでお送りします。

彩香
Java入門も最終回ですね。随分と色々、勉強しました。
今回もバッチリ理解して、有終の美を飾ります。
剛留
オブジェクト思考の活用編は復習が不充分ですが
理解は進んでいます。

今回も、よろしくお願いします。

【1】 例外対処方法

ここは前回の復習のコーナーです。
簡単に振り返っておきましょう。

発生する可能性のある例外について
Javaでは、大きく2つの対処方法が用意されています。

1つが「キャッチする。」

例外が発生したら
メソッド内でキャッチして対処する方法です。

発生した例外を ここで解消して
通常の処理に戻します。

もう一つは「投げる」。

例外が発生したら、このメソッドでは対処せず
呼び出し元に例外を投げる方法です。

この場合でも、メソッド呼び出しの階層の
どこかで 例外をキャッチして対応する必要があります。

…というお話を 前回しました。

そして前回は、左側のメソッド内で
対処する方法を学びました。

try-catch構文でしたね…。

今回は、右側の「投げる」ほうを勉強します。

「throws宣言」と「throw命令」を順に 見ていきましょう。

彩香
復習完了です。
剛留
ここまでは、大丈夫です。
try-catch も覚えています。

【2】 throws宣言

throws宣言
✅ メソッド内で try-catch を
  行わない場合には、例外は
  呼び出し元に投げられる。

✅ throws宣言は、呼び出し元に
  投げられる可能性のある例外を
  メソッド定義の中で宣言すること。

Javaでは、こう記述します。

戻り値の型 メソッド名(型 引数,…)
          throws 例外クラス名 {

 (例外が発生する可能性のある処理)


通常のメソッド定義の引数を記述する丸括弧の後に

キーワード throws を書いて
その後に例外クラス名を 記述します。

そして、メソッドの中には throws で指定した例外が
発生する可能性のある処理を記述します。

なお、必ず例外処理をする必要のある
検査例外については…

try-catch を行うか
throws宣言を行うことが、必須

となります。

ですので、検査例外が発生する可能性のある
処理を記述した場合に…

try-catch も throws宣言 も行わない場合には
コンパイルエラーとなります。

【3】 throw命令

throw命令とは、例外オブジェクトを プログラム中に
throw(投げる)事ができる… というものです。

throwされた例外オブジェクトは…

JVMにより生成された例外オブジェクトと
同様に扱うことができます。

throw命令
✅ 例外オブジェクトをプログラム中に
  throw(投げる)事ができる。

✅ throwされた例外オブジェクトは
  JVMにより生成された例外オブジェクトと
  同様に扱うことができる。

new演算子により、例外オブジェクトを作成し
throw すれば…

try-catchで キャッチできますし…

メソッド呼び出し元に
例外処理を委ねることもできるのです。

Javaで throw 命令を書く時には
このようにします。

【throw命令】
例外クラス名 変数名
= new 例外クラス名(メッセージ文字列);
throw 変数名;

まずは、例外オブジェクトの生成です。

通常に 例外クラスの インスタンス化を行います。

例外クラス名 変数名 を書いて =
new 演算子 に続けて、コンストラクタ呼び出しです。

この時に、引数には 例外オブジェクトが保持する
メッセージ文字列を指定します。

そして、生成した例外オブジェクトの throw です。

キーワード throw を記述した後に
生成したオブジェクトの変数名を記述します。

【例】
String msg = “これがメッセージです。”;
IllegalArgumentException ex
= new IllegalArgumentException(msg);
throw ex;

例としては、まず ここでは String型変数 msg に
例外オブジェクト作成時に必要となるメッセージを代入して…

この例では、IllegalArgumentExceptionという
例外クラスを インスタンス化します。

引数が不正という意味の例外です。

メッセージを引数で渡して、コンストラクタを起動し
インスタンス化して ex という変数に代入。

そして、throw 命令で 例外を throw しています。

彩香
throws宣言 は、こういう例外 投げるかも…
と宣言しておく事で…

throw命令は、例外をビュンと投げる事ですね。

理解しました。

剛留
throws と throw の違い、分かりました。

違いの解る男 になりました。

【まとめ】

【1】 例外対処方法
✅ 対処方法は2つ

  ① メソッド内でキャッチする
  ② 呼び出し元に投げる

✅ 今回は ② 呼び出し元に投げる
  のお話でした。

【2】 throws宣言
✅ メソッド内で try-catch を
  行わない場合には、例外は
  呼び出し元に投げられる。

✅ throws宣言は、呼び出し元に
  投げられる可能性のある例外を
  メソッド定義の中で宣言すること。

【3】 throw命令
✅ 例外オブジェクトをプログラム中に
  throw(投げる)事ができる。

✅ throwされた例外オブジェクトは
  JVMにより生成された
  例外オブジェクトと同様に
  扱うことができる。