カテゴリ: Kotlin 更新日: 2026/09/08

Kotlinの例外クラスの階層をやさしく解説!初心者でも理解できる例外処理の基本

Kotlinの例外クラス階層を理解するためのポイント
Kotlinの例外クラス階層を理解するためのポイント

先生と生徒の会話形式で理解しよう

生徒

「Kotlinってエラーが起きたときにどうやって処理してるんですか?階層っていうのがあるって聞いたんですが…」

先生

「とても大事な質問ですね。Kotlinでは『例外(れいがい)』というエラーを表すしくみがあって、それにはクラスの階層(かいそう)という仕組みがあるんです。」

生徒

「クラスの階層ってなんですか?初心者でも分かるように教えてほしいです!」

先生

「もちろんです!Kotlinでの例外クラス階層を、わかりやすく説明していきますね。」

1. 例外(れいがい)ってなに?

1. 例外(れいがい)ってなに?
1. 例外(れいがい)ってなに?

まずは「例外」とは何かを理解しましょう。例外(Exception)とは、プログラムを実行している途中で想定していなかったトラブルが起きたことを知らせる仕組みです。人でいえば「作業中に問題が起きたので、一度立ち止まって知らせる合図」のようなものです。

たとえば、次のような場面は初心者でもよく出会います。

  • 数字として扱いたい値に、文字が混ざっていた
  • 存在しないファイルを開こうとした
  • 中身が入っていないデータを使おうとした

こうした問題が起きたとき、Kotlinはそのまま黙って進むのではなく、例外クラスを使って「ここで問題が起きました」と教えてくれます。

たとえば、数字に変換できない文字を扱うと、次のようなシンプルなコードでも例外が発生します。


fun main() {
    val text = "abc"
    val number = text.toInt()
    println(number)
}

この場合、「文字を数字に変換できない」という問題が起き、Kotlinは例外を投げます。つまり、例外とはプログラムが間違った状態になりそうなときに出される警告のような存在なのです。まずは「例外=エラーの合図」と覚えておくと理解しやすくなります。

2. 例外クラスとは?

2. 例外クラスとは?
2. 例外クラスとは?

Kotlinでは、例外(エラー)はただの文章ではなく、すべてクラスとして用意されています。クラスは「設計図」のようなもので、「どんな場面で起きるエラーか」「どんな情報を持っているか」をまとめたものだと思うと分かりやすいです。

たとえば、0で割ったときに出るArithmeticException、nullをうっかり使ったときに出るNullPointerExceptionなど、エラーの内容ごとに名前が分かれています。名前が分かれているおかげで、「今起きたのは何のトラブルか」をプログラム側で判断できるわけです。

そして大事なのが、これらの例外クラスはバラバラに存在しているのではなく、階層(親子関係)を持っていることです。どの例外もたどっていくと、最終的には共通の親であるThrowableにつながります。つまり、例外クラスは「大きなグループの中に、細かい種類がぶら下がっている」イメージです。

試しに、例外をわざと発生させて「どの例外クラスが出るのか」を見てみましょう。


fun main() {
    val text = "abc"

    try {
        val number = text.toInt()
        println(number)
    } catch (e: Exception) {
        println("発生した例外クラス: ${e::class.simpleName}")
    }
}

このサンプルでは、変換に失敗すると例外が発生し、catchで受け取ったeから例外クラス名を表示します。こうして「例外はクラスとして扱われている」ことが実感できます。

3. Kotlinの例外クラス階層を図で理解しよう

3. Kotlinの例外クラス階層を図で理解しよう
3. Kotlinの例外クラス階層を図で理解しよう

Kotlinの例外は、すべてが同じ立場ではなく、親子関係を持つクラス構造になっています。これを「例外クラスの階層」と呼びます。難しそうに見えますが、「大きな分類から、だんだん細かく分かれていく」と考えるとイメージしやすくなります。

まず一番上にあるのが、すべての例外の元になるThrowableです。KotlinやJavaで発生するエラーや例外は、必ずこのクラスを親に持っています。

  • Throwable(すべての例外・エラーの出発点)
    • Error(システム的で重大な問題)
    • Exception(プログラムで対処できる問題)
      • RuntimeException(実行してみて初めて分かる問題)
        • NullPointerException
        • IndexOutOfBoundsException
        • ArithmeticException
      • IOException
      • SQLException

この構造を見ると、たとえばArithmeticExceptionは「RuntimeExceptionの一種」であり、さらにその親はException、最終的にはThrowableにつながっていることが分かります。

実際にコード上でも、この親子関係を利用して例外をまとめて扱うことができます。次のサンプルでは、どんな実行時例外が起きても同じcatchで受け取っています。


fun main() {
    try {
        val list = listOf(1, 2, 3)
        println(list[5]) // 範囲外アクセス
    } catch (e: RuntimeException) {
        println("RuntimeExceptionの仲間が発生しました")
    }
}

このように、例外クラスの階層を理解しておくと、「細かく処理するか」「まとめて処理するか」を状況に応じて選べるようになります。まずは上に行くほど大きな分類、下に行くほど具体的な例外と覚えておくと安心です。

4. 実際の例を見てみよう

4. 実際の例を見てみよう
4. 実際の例を見てみよう

ここでは、例外クラスが実際にどのタイミングで発生するのかを、具体的なコードで確認してみましょう。初心者がつまずきやすい代表例が「0で割る」計算です。

一見すると普通の計算に見えますが、割る数が0になると、Kotlinは自動的にArithmeticExceptionという例外を発生させます。


fun main() {
    val num = 10
    val zero = 0
    val result = num / zero
    println("結果は: $result")
}

このコードを実行すると、計算結果は表示されず、次のようなメッセージが出ます。


Exception in thread "main" java.lang.ArithmeticException: / by zero

これは「0で割ろうとしたため、計算を続けられない」という意味です。ArithmeticExceptionはRuntimeExceptionの仲間で、実行してみて初めて問題が分かるタイプの例外です。

つまり、Kotlinは危険な計算をそのまま続けるのではなく、例外を使ってプログラマーに問題を知らせているのです。このような実例を見ると、「例外はプログラムを守るための仕組み」だということが実感できるはずです。

5. 例外の種類とそれぞれの特徴

5. 例外の種類とそれぞれの特徴
5. 例外の種類とそれぞれの特徴

Kotlinでよく出会う例外(エラー)の種類を見てみましょう。ここで押さえたいのは、「例外には名前があり、それぞれ起きる原因がだいたい決まっている」という点です。原因が分かると、どこを直せばいいかも見つけやすくなります。

  • NullPointerException(ぬるぽ)
    空っぽの値(null)を使おうとしたときに出る。
  • ArithmeticException
    数字の計算でエラー(0で割るなど)になったときに出る。
  • IndexOutOfBoundsException
    リストの中に存在しない場所にアクセスしたときに出る。
  • IOException
    ファイルやネットワークの読み書きに問題があったときに出る。

たとえば「リストの範囲外アクセス」は、初心者でも起こしやすいミスです。次のサンプルでは、存在しない番号を指定してしまい、IndexOutOfBoundsExceptionが発生します。


fun main() {
    val list = listOf("りんご", "みかん", "ぶどう")
    println(list[3]) // 0〜2までしかないのでエラーになる
}

このように、例外は「どんなミスが起きたか」を教えてくれるヒントでもあります。これらはすべてExceptionクラスの仲間なので、プログラムの中でtry-catchを使って受け取り、落ち着いて対処することができます。

6. なぜ例外階層を知ることが大切なの?

6. なぜ例外階層を知ることが大切なの?
6. なぜ例外階層を知ることが大切なの?

例外のクラス階層を理解しておくと、エラーが起きたときにどこまでまとめて対応するか、どこから個別に対応するかを自分で判断できるようになります。これは、安定したプログラムを書くうえでとても重要な考え方です。

たとえば、まだ処理を細かく分けられない初心者のうちは、Exceptionでまとめて受け取るだけでも十分な場合があります。一方で、慣れてくると「ファイル関連のエラーだけ特別に処理したい」といった判断もできるようになります。


fun readFile() {
    try {
        // ファイルを読む処理
    } catch (e: IOException) {
        println("ファイルの読み込み中に問題がありました")
    } catch (e: Exception) {
        println("その他のエラーが発生しました")
    }
}

この例では、IOExceptionを先に書くことで「ファイルの問題」だけを個別に処理し、それ以外の例外はまとめて受け取っています。これは、例外クラスが親子関係を持っているからこそできる書き方です。

例外階層を知っていれば、必要以上にエラーを取りこぼしたり、逆に何でも一括で処理してしまう失敗も減ります。まずは「階層を意識すると処理の幅を調整できる」と覚えておくと安心です。

7. Errorクラスってなに?

7. Errorクラスってなに?
7. Errorクラスってなに?

先ほどの図で紹介した「Error」クラスについても、初心者向けに整理しておきましょう。Errorは、プログラムの書き方以前に、実行環境そのものに深刻な問題が起きたことを表すクラスです。

代表的なものに、メモリが足りなくなったときに発生するエラーなどがあります。これは「処理の工夫」で回避できる問題ではなく、プログラムの続行自体が危険な状態を意味します。

そのため、Errorは基本的にcatchして処理しないのが一般的です。無理に続行すると、データ破損や予期しない動作につながる可能性があります。


fun main() {
    // Errorは通常、意図的に処理するものではありません
    // 発生した場合は、プログラムを終了させるのが基本です
}

まとめると、Exceptionは「プログラムで対処できるトラブル」、Errorは「対処が難しい致命的な問題」です。この違いを知っておくだけでも、例外クラス階層の理解がぐっと深まります。

Kotlinを基礎からしっかり学びたい人や、 Java経験を活かしてモダンな言語にステップアップしたい人には、 定番の入門書がこちらです。

基礎からわかるKotlinをAmazonで見る

※ Amazon広告リンク

まとめ

まとめ
まとめ

Kotlinの例外クラス階層を理解することは、例外処理の基本を身につけるうえでとても重要なステップです。例外はただ「エラーが起きた」と知らせるだけではなく、その種類や階層ごとの役割によって、どのように対処するべきかが大きく異なります。例外には、開発者が適切に処理して回復できるものもあれば、プログラムを継続するより停止したほうが安全な重大なエラーもあります。こうした例外クラスの階層構造を理解しておくことで、エラーの発生原因をすばやく特定し、的確な処理を行えるようになります。 Kotlinの例外階層は、すべての例外の親であるThrowableを頂点として、その下にErrorとExceptionが続きます。そのうち、開発者が扱う中心となるのはExceptionクラスです。Exceptionの中にもRuntimeExceptionがあり、その下にNullPointerException、ArithmeticException、IndexOutOfBoundsExceptionなど、よく使う例外が並んでいます。これらはプログラムの実行中に起こりえる「予想外の問題」を表しており、try-catchで安全に処理できます。 また、例外階層を知ることのメリットは、catchで指定する型を適切に選べるようになることです。Exceptionを指定すれば広い範囲の例外を捕まえられますが、IOExceptionやArithmeticExceptionのように特定の例外を指定すれば、より細かい制御が可能です。例外を扱う際は、どの範囲で処理すべきかを意識しながらcatchを書くことが大切で、階層構造を理解していると自然と最適な形に整理できます。 また、Errorクラスについても、知識として覚えておく価値があります。Errorはメモリ不足などの致命的な問題を表し、通常はcatchしません。プログラムの不具合を示すため、処理を続けるよりも停止して原因を調べるほうが適切です。このように、ExceptionとErrorの違いを知ることも、例外処理の質を上げるためには欠かせない知識です。 Kotlinで開発を行ううえでは、例外クラスの階層を理解し、自分のコードにどの例外が発生しうるのかを想定して書けるようになると、大規模なプログラムでも信頼性の高い処理が実現できます。今回学んだ内容は、例外を正しく扱うための基礎であり、実践の場でも役に立つ重要な知識です。

サンプルプログラム

例外クラス階層を意識しながら、複数の例外を使い分けて処理する例を示します。数字の変換エラー、0除算のエラー、その他一般的な例外をそれぞれ個別に扱い、問題の特定や復帰処理をしやすくしています。


fun processInput(input: String): Int {
    return try {
        val number = input.toInt()
        50 / number
    } catch (e: NumberFormatException) {
        println("入力値を数字に変換できませんでした: ${input}")
        -10
    } catch (e: ArithmeticException) {
        println("0で割ることはできません。計算を中断します。")
        -20
    } catch (e: Exception) {
        println("予期しない例外が発生しました: ${e.message}")
        -999
    }
}

fun main() {
    val a = processInput("abc")
    val b = processInput("0")
    val c = processInput("5")

    println("処理結果A: $a")
    println("処理結果B: $b")
    println("処理結果C: $c")
}

例外クラス階層を意識することで、どのcatchがどのようなケースに対応しているかがはっきりわかるようになり、エラー処理を安全にコントロールできます。

先生と生徒の振り返り会話

生徒

「例外って全部同じだと思っていたけど、階層があるって知ってびっくりしました!親クラスと子クラスって大事なんですね。」

先生

「その通りですよ。階層を理解しておくと、catchでどの例外を処理したいのかが一目でわかるので、プログラム全体の安全性が上がります。」

生徒

「ExceptionとErrorの違いもよくわかりました。Errorは無理に処理しないほうがいいんですね。」

先生

「そうです。Errorは重大な問題なので、無理にプログラムを継続しようとすると危険なのです。」

生徒

「例外の種類がたくさんある理由も納得しました。状況ごとに適したエラーが用意されているんですね!」

先生

「その理解はとても良いですね。例外の種類を知っているほど、どんな問題にも対応できるようになりますよ。」

生徒

「今日学んだことを活かして、例外処理をもっと書けるようになりたいです!」

関連セミナーのご案内

【未経験OK】Kotlinで始めるプログラミング入門|ゼロから「動く喜び」を体験する60分

「プログラミングを始めたい」を形にする。最新言語Kotlinで楽しむ、ものづくりの第一歩。

本講座は、プログラミング経験が全くない方のためのエントリー講座です。「コードを書くってどういうこと?」という基本から、世界中で使われている最新言語Kotlin(コトリン)を使って、実際にプログラムを動かすまでを体験します。難しい理屈よりも、まずは「自分の手で動かす楽しさ」を最短距離で実感していただきます。

具体的な体験内容と環境

【つくるもの】
簡単な言葉を入力すると自動で返答してくれる「対話型ミニプログラム」や、計算を自動化する「便利ツール」をゼロから作成します。黒い画面に自分の書いた文字が表示される瞬間は、最高の感動体験です。

【開発環境】
プロのエンジニアが実際に使っている開発ツールIntelliJ IDEA(インテリジェイ)をインストールします。ボタン一つで日本語化し、初心者でも迷わず操作できる「魔法の設定」を一緒に行います。

この60分で得られる3つの体験

1. 自分のパソコンが「開発基地」に

プロと同じ道具を揃えることで、明日から一人でもプログラミングを続けられる環境が整います。

2. プログラミングの「仕組み」がスッキリ

「変数」や「型」といった難しい言葉も、身近な例え話で解説。モヤモヤをゼロにします。

3. 「読みやすい」から「直せる」へ

Kotlinは英語に近くて読みやすいのが特徴。自分でコードを読んで、間違いを見つけるコツも伝授します。

※本講座は、パソコン操作が不安な方でも安心して受講いただける完全マンツーマンです。あなたのペースに合わせて、一つずつ丁寧に進めていきます。

セミナー画像

Kotlinで始めるプログラミング入門|ゼロから「動く喜び」を体験

関連記事:
カテゴリの一覧へ
新着記事
New1
Kotlin
Kotlinのrunの使い方!スコープ内で処理をまとめるテクニック
New2
Kotlin
Kotlinの文字列を逆順にするreversedの使い方を徹底解説!初心者でもわかる文字列操作入門
New3
Kotlin
KotlinのtoList・toCharArrayの使い方を徹底解説!文字列をリストに変換する方法を初心者向けにやさしく説明
New4
Kotlin
Kotlinの拡張プロパティとは?基本的な作り方と活用例を初心者向けに解説
人気記事
No.1
Java&Spring記事人気No1
C#
C#プログラムの基本的な書き方を完全解説!初心者でもわかる文法入門ガイド
No.2
Java&Spring記事人気No2
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.3
Java&Spring記事人気No3
Swift
Swift入門ガイド|基本構文と書き方をマスターしよう
No.4
Java&Spring記事人気No4
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.5
Java&Spring記事人気No5
C#
C#の論理演算子の使い方を完全ガイド!&&・||・!を初心者でもわかりやすく解説
No.6
Java&Spring記事人気No6
Kotlin
Kotlinのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.7
Java&Spring記事人気No7
Kotlin
KotlinでZIPファイルの圧縮と解凍を実装する手順を完全解説!Kotlinファイル操作と入出力I/O入門
No.8
Java&Spring記事人気No8
Swift
Swiftでユーザー向けエラーメッセージ設計を徹底解説!iOSアプリのUI/UXで注意すべきポイント

💻 作業効率アップに

ノートPCを縦置きしてデスクを広く。
省スペースで片づく定番スタンド

UGREEN 縦型スタンドをAmazonで見る

※ Amazon広告リンク