System.out.println("Java学習中");

【Java / Spring Boot】UI/UXの視点を活かしたバックエンド開発の学習ポートフォリオ

【Java Silver対策】switch文の「3つの罠」(フォールスルー・defaultの位置・Nullエラー)

🟢 はじめに

Javaのプログラミングを学んでいると、必ず出会うのが条件分岐の switch 文だと思います。

一見シンプルに見えますが、実は初心者が引っかかりやすい「3つの罠」が隠されています。

今回は、Java Silverの試験対策としても重要だと言われているこの罠について、「ダンジョン探索」に例えながら分かりやすく解説します。


【サンプルコード】

まずは、今回探検するダンジョンコード)を見てみましょう。

public class SwitchDungeon {
    public static void main(String[] args) {
        
        System.out.println("=== 罠その1:滑り落ちる床 ===");
        String item = "ポーション";
        switch (item) {
            case "ポーション":
                System.out.println("HPを回復した!");
                // ⚠️ ここに break; がない!
            case "毒消し":
                System.out.println("毒が治った!");
                break;
            default:
                System.out.println("効果がなかった...");
        }

        System.out.println("\n=== 罠その2:裏口(default)からの落下 ===");
        String monster = "ドラゴン";
        switch (monster) {
            default:
                System.out.println("逃げ出した!");
                // ⚠️ ここにも break; がない!
            case "スライム":
                System.out.println("スライムを倒した!");
                break;
            case "ゴブリン":
                System.out.println("ゴブリンを倒した!");
                break;
        }

        System.out.println("\n=== 罠その3:見えないカギ ===");
        String key = null;
        // ⚠️ 以下のコメントアウトを外すとエラーでゲームオーバーになります
        /*
        switch (key) {
            case "金の鍵":
                System.out.println("宝箱を開けた!");
                break;
        }
        */
    }
}

【解説部分】

罠その1:break; 忘れによる「フォールスルー(滑り落ちの罠)」

コードの最初の部分を見てください。

勇者は「ポーション」を持って部屋に入りました。

当然「HPを回復した!」と表示されますが、その後に break;脱出ワープ)がありません。

switch 文では、break; がないと床が抜けて下の部屋(次のcase)へどんどん落ちてしまいます。

結果として、毒状態でもないのに「毒が治った!」まで実行されてしまうのです。

これをフォールスルーと呼びます。

✅ ポイント: break; がないと、条件に関係なく下へ下へと処理が実行され続ける!

罠その2:defaultは一番下とは限らない!

2つ目の罠です。

ドラゴン」に遭遇しましたが、case には「スライム」と「ゴブリン」しかありません。

該当する扉がない場合、合鍵の扉である default に進みます。

ここで注目すべきは、default が一番上に書かれていることです。

default はどこに書いても「一致するcaseがない場合」のスタート地点になります。

しかし、ここでも break; がないため、「逃げ出した!」の後に床が抜け、下の「スライムを倒した!」まで実行されてしまいます。

✅ ポイント: default は一番下になくてもOK!ただし break; がないとやっぱり下へ落ちる!

罠その3:nullを渡すと即ゲームオーバー(NullPointerException

最後の罠はとても凶悪です。

カギの変数に nullカギの実体がない透明なカギ)を持たせて switch ダンジョンに入ろうとするとどうなるでしょうか?

Java門番)は「カギがないじゃないか!」と怒り出し、NullPointerException というエラーを吐いてゲームプログラム)が強制終了してしまいます💥

✅ ポイント: switch(変数) の変数に null を入れるとエラーで強制終了になる!


【まとめ】

いかがだったでしょうか?

switch 文を書くときは、以下の3つを確認すると良いと思います。

1️⃣ フォールスルー: break;脱出ワープ)はちゃんと書いた?

2️⃣ defaultの位置: 上にあっても機能するけど、その後の break; は大丈夫?

3️⃣ Nullエラー: カッコの中身が null になる可能性はない?

Java学習中の方の参考になれば幸いです🙌


【プロフィール・作品置き場】

kenichikamoi.com


🎵 Youtube(楽曲一覧)はこちら

www.youtube.com