1. 数値文字列 "42" は 42 にパースされる
  2. 数値に変換できない "abc" は 0 を返す
  3. 空文字 "" も数値にできないので 0 を返す
  4. マイナス記号付きの "-5" はパースできて -5 を返す
  5. 正の整数 "100" は 100 にパースされる
  6. 小数文字列 "3.14" は int にできないので 0 を返す
コース一覧
Java 中級:コレクション・Stream・例外処理
try-catch で例外をつかむ

Java 中級:コレクション・Stream・例外処理

コレクション、ジェネリクス、例外処理、Stream API、関数型インターフェース、日付処理、ファイル I/O、継承など Java の中級トピックを実践的に学べるコースです。Java の基礎文法とオブジェクト指向を理解している学習者を対象に、現場の Java コードを読み書きするための知識を補強します。約 16 時間 (1 日 30 分 × 32 日) で 64 レッスンを修了でき、修了後は Spring Boot や業務システム開発に必要な Java 力が身につきます。

1
コレクション基礎
01. ArrayList を使う5分
02. List を走査する5分
03. 要素の削除と検索5分
04. HashMap の基本5分
05. Map を走査する5分
06. Set で重複を排除5分
07. Collections クラスの便利メソッド5分
08. コレクション基礎 まとめクイズ5分
2
ジェネリクス
01. ジェネリッククラスを作る5分
02. ジェネリックメソッド5分
03. 境界型パラメータ5分
04. ワイルドカード ?5分
05. Pair<K,V> を作る5分
06. ジェネリクス まとめクイズ5分
3
例外処理
01. try-catch で例外をつかむ5分
02. 複数の catch ブロック5分
03. throws と例外の伝播5分
04. 独自の例外を作る5分
05. try-with-resources5分
06. finally ブロック5分
07. 例外処理 まとめクイズ5分
4
Stream API
01. Stream を作る5分
02. filter で絞り込む5分
03. map で変換する5分
04. reduce で集約する5分
05. collect で集める5分
06. sorted で並び替え5分
07. distinct で重複排除5分
08. limit と skip5分
09. 並列ストリーム5分
10. Stream API まとめクイズ5分
5
関数型インターフェース
01. ラムダ式の基本5分
02. メソッド参照 ::5分
03. Function インターフェース5分
04. Predicate インターフェース5分
05. Consumer と Supplier5分
06. BiFunction と 2 引数の関数5分
07. 関数型インターフェース まとめクイズ5分
6
文字列操作
01. String.format で書式化5分
02. StringBuilder で連結5分
03. 正規表現の基本5分
04. split と join5分
05. 文字列操作 まとめクイズ5分
7
日付と時刻
01. LocalDate で日付を扱う5分
02. LocalDateTime で時刻も扱う5分
03. Duration で時間差を計算5分
04. 日付の書式化とパース5分
05. 日付の加減算5分
06. 日付と時刻 まとめクイズ5分
8
ファイル I/O
01. Files でファイルに書き込む5分
02. ファイルを行単位で読む5分
03. Path でファイルパスを扱う5分
04. BufferedReader と Stream API5分
05. ファイルの存在確認と削除5分
06. ファイル I/O まとめクイズ5分
9
継承とポリモーフィズム
01. extends で継承する5分
02. super で親を呼ぶ5分
03. メソッドのオーバーライド5分
04. abstract で抽象クラス5分
05. interface で契約を定義5分
06. default メソッド5分
07. instanceof と型パターン5分
08. ポリモーフィズムを活かす5分
09. 継承とポリモーフィズム まとめクイズ5分

try-catch で例外をつかむ

try と except のルート

1 件おかしいだけで、残りの 999 件が処理されない

3 桁の英字とハイフンで始まる伝票コードを、まとめて処理するプログラムを書いたとします。ところが 1 件だけ形式の違うデータが混じっていて、そこで止まってしまいました。

Java

String[] codes = {"AB-123", "XY-999", "ZZ", "CD-456"}; for (String code : codes) { System.out.println(code.substring(3)); }

3 件目の "ZZ" は 3 文字目がないので、substring(3) が StringIndexOutOfBoundsException を投げます。この瞬間にプログラムは止まり、4 件目の "CD-456" は永久に処理されません。おかしいのは 1 件なのに、正しい 3 件まで巻き添えになるわけです。

Java は、こういう「想定外の事態」を例外という名前のオブジェクトで表します。何も対処しないと、例外が起きたところで処理が打ち切られ、そのまま外に飛び出していきます。

try に入れて、catch で受け止める

飛び出していく例外を途中で受け止めるのが try-catch です。try に「失敗するかもしれない処理」、catch に「失敗したときの後始末」を書きます。

Java

for (String code : codes) { try { System.out.println(code.substring(3)); } catch (StringIndexOutOfBoundsException e) { System.out.println(code + " は形式が違うので飛ばします"); } }

これで 4 件すべてが最後まで処理されます。"ZZ" のところでは catch に飛び、メッセージを出したあと、次の周回に進みます。落ちずに続けられるようになったわけです。

catch (StringIndexOutOfBoundsException e) は「この型の例外を e という名前で受け取る」という意味です。e.getMessage() で原因の文字列、e.printStackTrace() で発生箇所の一覧が取り出せます。

例外の型は上下関係で並んでいます。頂点が Throwable、その下が Error と Exception の 2 本、さらに Exception の下に RuntimeException があります。Error は JVM 自体の異常なのでアプリ側では捕まえません。ふだん相手にするのは RuntimeException から下です。

catch の中に何を書くか

catch に入ったあと何をするかは設計の判断です。よく使うのは次の 2 つです。

  • ログに残す。e.printStackTrace() や業務ログへの出力で、あとから原因を追えるようにする
  • 代わりの値で続ける。失敗したら決められた既定値を使い、処理全体は止めない

上の例は 2 つ目に近い形です。読み取れなかった 1 件を飛ばして、残りを最後まで走らせています。

catch の型はできるだけ狭く指定してください。catch (Exception e) と書くと確かに何でも捕まりますが、本当は直すべき別のバグまで一緒に握り込んでしまいます。

よくある間違い

いちばん危険なのは、catch ブロックを空にする書き方です。

Java

try { riskyWork(); } catch (Exception e) { // 何もしない }

これを書くと例外が完全に消えます。画面にもログにも何も出ないまま、データだけが少しずつ壊れていきます。半年後に気づいたときには、原因を追う手がかりが 1 つも残っていません。何もすることがないときでも、最低限ログには残してください。

要件

  1. try ブロックの中で Integer.parseInt(s) を呼び、その戻り値を return すること
  2. catch (NumberFormatException e) で例外を捕まえ、catch ブロックの中で 0 を返すこと
  3. catch (Exception e) のような広すぎる型ではなく、NumberFormatException をピンポイントで指定すること

入出力例

parseOrZero("42") → 42 parseOrZero("abc") → 0 parseOrZero("") → 0 parseOrZero("-5") → -5 parseOrZero("100") → 100 parseOrZero("3.14") → 0

ヒント

`try { return Integer.parseInt(s); } catch (NumberFormatException e) { return 0; }` の形が基本パターンです

`Integer.parseInt` は変換できないときに `NumberFormatException` を投げます。空文字 `""` や `"abc"` `"3.14"` は全部この例外になります

`try` ブロック内で `return` が成功すれば `catch` には飛びません。失敗したときだけ `catch` の `return 0;` が実行されます

生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/05/19·更新 2026/08/26

関連レッスン

  • 複数の catch ブロック

    Java の `try-catch` で複数の例外を別々に処理する書き方と、multi-catch 構文・`finally` の役割を、文字列割り算メソッドを通して学ぼう。

  • throws と例外の伝播

    `throws` キーワードと検査例外の伝播を学び、`Integer.parseInt` の失敗を `try-catch` で受け止めて 0 を返す `safeParse` メソッドを実装してみよう。

  • 独自の例外を作る

    Java の例外クラスを継承して独自の `InsufficientFundsException` を作り、銀行口座の出金処理で `throw` / `catch` する流れを学んでみよう。

  • try-with-resources

    AutoCloseable なリソースを安全に扱う try-with-resources 構文を学び、リソースの自動クローズを体験しよう。

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • try-except例外を捕まえて処理を続ける構文
  • 処理計算や代入を表す長方形
  • オブジェクトキーと値のペアで構造を作るデータ
  • 設計何をどう作るかを決める前工程
  • 判断YES/NO 分岐を表す菱形
  • ロック「他の人触らないでね」と DB に予約する
  • 戻り値呼び出し元への返答を表す点線矢印
main.java
学習モード
エディタを読み込んでいます

メモ

try-catch で例外をつかむ

⌘S で保存