「プログラミング」タグアーカイブ

Java:IllegalArgumentExceptionの意味と例外設計のベストプラクティス

Javaアプリケーション開発では「想定外の入力」に対して適切にエラーを発生させ、プログラムの異常動作を防ぐことが重要です。その際によく使用される例外のひとつが IllegalArgumentException です。

本記事では、IllegalArgumentException の意味、発生するケース、使い方の例、そして例外設計のベストプラクティスまで徹底解説します。


IllegalArgumentExceptionとは?

IllegalArgumentException とは、

メソッドに不正な引数(値)が渡された場合にスローされる実行時例外(RuntimeException)

です。

例えば、年齢を受け取るメソッドに 負の値 が渡された場合など、
「引数の値が意味を成していない」状態で使われます。


なぜIllegalArgumentExceptionを使うのか?

✔ 不適切な入力を早期に検知
✔ 異常な状態を防ぎ、予測可能な動作を保証
✔ 開発者や利用側に明確なフィードバック

特に、ライブラリ・APIの開発時には重要です。
「どんな値が許容されるのか?」を明確にすることで利用者のミスを防げます。


IllegalArgumentExceptionの基本例

✅ 正の値のみ受け付けるメソッド例

チェックポイント

  • 条件式で検証

  • 明確なメッセージで何が悪いか伝える


Integerチューター:標準APIにも見る例

Java標準APIも積極的にこの例外を使っています。

例:Thread#setPriority(int priority)

Java公式の一貫性ある設計に従うことで、コード品質が向上します。


IllegalArgumentException vs 他の例外

例外使う場面
IllegalArgumentException引数の値が不正
NullPointerException引数がnull不可なのにnull
IllegalStateExceptionオブジェクトの状態が不正
IOExceptionI/O操作中の問題

ポイント

  • 値がおかしい→IllegalArgumentException

  • 状態がおかしい→IllegalStateException


ベストプラクティス:例外設計ガイド

✅ 1. 早めにチェックする(Fail Fast)

異常はできるだけ早く発見しましょう。

✅ 2. メッセージで原因を明示

悪い例(NG)

何が悪いのか分からない…

✅ 3. Javadocで事前に仕様を明記

APIの信頼性が向上します。

✅ 4. nullチェックはObjects.requireNonNullで簡潔に


ユースケース:バリデーションロジックの整理方法

例外処理が肥大化しないよう、専用バリデータクラスを作るアプローチも有効です。

利用例:


まとめ

ポイント内容
例外名IllegalArgumentException
意味不正な引数が渡された
目的予期しない動作を防ぐ
コツFail Fast、明確なメッセージ、仕様明記

良い例外設計はコードの信頼性・保守性を大きく高めます。
実務でも積極的に活用していきましょう!

【Java初心者向け】staticって何?よくある質問を例付きで解説

Javaを学び始めると、最初に必ずと言っていいほど出てくるキーワードがstatic
でも、

  • staticって具体的に何をしているの?

  • いつ使うべき?

  • staticをつけないとどうなるの?

という疑問を持つ方が多いです。

この記事では、できるだけ分かりやすくstaticの意味や使いどころを例を交えて解説します。


staticとは?

staticクラスに属するという意味です。
通常の変数やメソッドはインスタンス(newで作ったオブジェクト)に属しますが、staticクラス自体に属するため、オブジェクトを作らずに使うことができます。


よくある疑問と回答


Q1. なぜmainメソッドにはstaticが付いているの?

A:Javaプログラムを実行するとき、まず「クラス」を読み込むから。

プログラム開始時点ではまだオブジェクトがありません。
そこで、オブジェクト不要で実行できるようにするためstaticが付いています。


Q2. static変数と普通の変数の違いは?

種類所属使うタイミング
インスタンス変数オブジェクトオブジェクトごとに独立した値を持ちたいとき
static変数クラス全オブジェクトで共有したいとき
例:カウンター(全インスタンスで共有)

countは全インスタンスで共有されるため、2回インスタンス化すると値が2になります。


Q3. staticメソッドっていつ使うの?

  • ユーティリティ処理

  • 共通的な値や処理

  • インスタンスの状態に依存しないメソッド

例:Mathクラス

Mathクラスはnewしません。
staticの代表例です。


Q4. staticを付けすぎるとどうなる?

オブジェクト指向らしさが失われます。

  • 何でもかんでもstatic → 関数型プログラムみたいになる

  • 状態(フィールド)を持つ設計が難しくなる

✅ ルール

  • 状態を持つもの → インスタンス

  • 共通処理 → static


まとめ

用語意味
staticクラスに属する(オブジェクト不要)
static変数全インスタンスで共通の変数
staticメソッドインスタンスに依存しない処理
mainメソッドがstaticな理由最初はオブジェクトがないため

まずは「オブジェクト不要で使える」だけ覚えてOK!
使いながら感覚をつかみましょう ✅

Oracle「ORA-06502: PL/SQL 数値または値エラー」エラーが出た時の解決方法

Oracle データベースを利用していると、**「ORA-06502: PL/SQL: 数値または値エラー」**というエラーに遭遇することがあります。これは比較的よく見られるエラーの一つで、主に「データ型の不一致」や「文字列長の超過」が原因です。この記事では、このエラーの代表的な原因と解決方法を解説します。


ORA-06502 エラーの意味

エラーメッセージ全文は以下のようになります。

 
ORA-06502: PL/SQL: 数値または値エラー

このエラーは、PL/SQL 実行時に「値が期待されるデータ型に収まらない」場合に発生します。例えば以下のケースです。

  • 数値型の変数に、文字列を代入しようとした場合

  • VARCHAR2 の長さ制限を超える文字列を代入した場合

  • 型変換関数(TO_NUMBER, TO_DATE など)が失敗した場合


よくある原因と解決方法

1. 文字列長の超過

原因: 変数 VARCHAR2(5) に 6文字を代入している。

解決方法: 変数の長さを見直す、あるいは SUBSTR を利用して長さを調整する。


2. 数値変換エラー

原因: 数値に変換できない文字列を渡している。

解決方法: 入力値が数値かどうかを事前にチェックする。正規表現を利用するのも有効です。

 
IF REGEXP_LIKE('123', '^[0-9]+$') THEN v_num := TO_NUMBER('123'); END IF;

3. 不正な日付変換

原因: 存在しない日付を変換しようとした。
解決方法: 入力フォーマットをチェックし、妥当な値のみ渡す。


4. 数値桁数のオーバーフロー

原因: 定義した精度・スケールを超える値を代入している。

解決方法: NUMBER の定義を見直す、または値を丸める。


トラブルシューティングのポイント

  • エラー発生時の 変数定義 を確認する

  • DBMS_OUTPUT.PUT_LINE代入しようとしている値 を出力する

  • データベースの カラム定義と変数定義の不一致 を確認する

  • 外部入力(CSV など)を扱う場合は 入力データの妥当性チェック を行う


まとめ

「ORA-06502」エラーは、ほとんどの場合 データ型の不一致値の範囲超過 が原因です。
再発防止のためには以下が重要です。

  • 変数やカラムの定義を余裕を持たせて設計する

  • 入力値チェックを徹底する

  • デバッグ時に DBMS_OUTPUT を活用して値を追跡する

これらを意識することで、エラーを効率的に解消できるはずです。