「こんにちは、アミーゴ!」

「やあ、エリー!人生はどう?」

「素晴らしいですね、ありがとうございます。調子はどうですか?」

「素晴らしいですね、今朝はたくさんの新しいことが説明されました。」

「まあ、よかったですね。疲れてないですか?」

「はい、それはあります。少し疲れています。」

「それでは、本当に幸運だったのです。今日は大きくて複雑なトピックを取り上げたかったのですが、土壇場で気が変わって、小さくて簡単なトピックを取り上げることにしました。」

「小さくて簡単? 準備はできています。」

「今日は例外のトピックを詳しく見ていきます。」

「エラー処理のことを言っているのですか?」

「例外をエラーと考えるべきではありません。例外は、むしろ『予期せぬことが起こった』というレポートに似ています。これらのレポートに基づいて、代替アクションを提案できます。」

「すべてはメソッドに関するものです。 メソッドを呼び出すと、メソッドは呼び出されたことを実行することを約束します。

「何らかの理由でメソッドが呼び出されたことを実行できない場合、メソッドは呼び出し元にそれを通知する必要があります。」

「言い換えれば、起こり得る最悪の事態は、メソッドがその機能を果たさず、それについて誰にも知らせないことです。それより悪いことはあり得ません。それが起こると、状況をコントロールできなくなります。

「新人プログラマーのときは、メソッドを呼び出すだけで、要求したことは確実に実行されるように思えます。」

「経験豊富なプログラマであれば、メソッドのジョブ実行能力に影響を与える要因が数十ある可能性があり、メソッドのジョブの完了を妨げるケースが多数あることを知っているはずです。」

「プログラマーの観点からすると、プログラムがエラーに遭遇してユーザーが何が起こったのか気づかずに(誤って)動作し続けるよりも、エラーが発生したときにプログラムが終了する方が千倍良いです。」

「ということは、プログラムが何か問題を示しているということは、プログラムが終了してすべてのデータが失われた場合よりも悪い可能性があるということでしょうか?」

「プログラムが単に何かを間違って表示しているだけだとなぜ思いましたか? もしかしたら、プログラムには多くのバグがあり、すべてのデータが回復不能に失われるかもしれません? 3 時間テキストを入力したとします。しかし、テキストは何も保存されません。わずか 2 分後にエラーが発生しました。」

「初心者プログラマーは例外に遭遇するとイライラします。」

「しかし実際には、例外は、彼が予見すべきだったのに予見しなかった、起こり得るすべてのシナリオを明らかにします。」

「例外を処理しないという選択もできますが、そうすればあなたはダメなプログラマになります。しかし、メソッドが例外をスローしないなら、あなたはまったくプログラマではありません。なぜなら、あなたは次の単純な真実を理解していないからです。」

「メソッドは、書かれたとおりに実行するか、例外をスローします。3 番目のオプションはありません。」

「わかりました、信じます。例外を使用することを約束します。」

「わかりました。それでは、例外の階層について説明しましょう。」

例外階層、エラー - 1

「例外階層は 4 つのクラスに基づいています。」

「最も低い基本クラスはThrowableです。」

Error クラスExceptionクラスはそれを継承します。」

RuntimeException はExceptionを継承します。」

Errorクラスは、 StackOverFlowOutOfMemoryなどの JVM エラーの基本クラスです。」

「プログラムは通常、このようなエラーから回復できず、終了してしまいます。」

「実際、プログラムを正常に実行し続けるのに十分なメモリがない場合、またはスタック オーバーフローが発生した場合はどうすればよいでしょうか?」

" Exceptionは、プログラムによってスローされるすべての通常の例外の基本クラスです。RuntimeException 、わずかに異なるルールを持つ特別な種類の例外です。"

"彼らは何ですか?"

「それが今から説明することです。」

「おそらく覚えていると思いますが、例外は 2 つのカテゴリに分類されます:チェック済みチェックなしです。」

「メソッドがチェック例外をスローする場合、それを呼び出すメソッドはその呼び出しをtry-catchブロックでラップする必要があります。そうするか、メソッド シグネチャでスローを明確に示して例外を (呼び出し元に) 再スローするかのどちらかです。」

「これらの規則/制限は、チェックされていない例外には適用されません。」

「したがって、Exception を継承するすべての例外はチェックされていると見なされます。RuntimeException を継承する例外は除き、チェックされていないと見なされます。」

「うーん。前にそんなこと言ったの覚えてるよ」

「アミーゴ! 彼らはすべてのインタビューで例外階層について尋ねます。もう一度言います。すべてのインタビューです。このトピックについて完全に理解する必要があります。」

「分かった。もう一度全部読んで理解するよ。助けてくれてありがとう、エリー。」