1. ホーム
  2. java

[解決済み] 関数を呼び出すときに「throws Exception」が必要なのはなぜですか?

2022-03-15 09:23:35

質問

class throwseg1
{
    void show() throws Exception
    {
        throw new Exception("my.own.Exception");
    }

    void show2() throws Exception  // Why throws is necessary here ?
    {
        show();
    }

    void show3() throws Exception  // Why throws is necessary here ?
    {
        show2();
    }

    public static void main(String s[]) throws Exception  // Why throws is necessary here ?
    {
        throwseg1 o1 = new throwseg1();
        o1.show3();
    }
}

なぜコンパイラは、メソッド show2() , show3() および main() 持つ

未報告例外 キャッチするか、スローするよう宣言しなければならない例外

を削除すると throws Exception をこれらのメソッドから削除しますか?

どのように解決するのですか?

Javaでは、ご存知のように、例外は2つに分類されます。ひとつは throws 節を指定するか、指定しない場合は処理しなければならないものと、指定しないものがあります。さて、次の図をご覧ください。

Java では、以下のように Throwable クラスがあります。ただし、このクラスには throws 節をすべてのクラスで使用できます。具体的には Error または RuntimeException またはそのサブクラスのいずれかです。あなたの場合 Exception のサブクラスではありません。 Error または RuntimeException . そのため、チェックされた例外であり、指定する必要があります。 throws 節で、その特定の例外を処理しない場合。それが、あなたが throws 節があります。


から Javaチュートリアル :

例外とは、プログラムの実行中に発生し、プログラムの正常な命令の流れを中断させる事象のことです。

さて、例外はご存知の通り、「チェックあり」と「チェックなし」の2つに分類されます。なぜこのような分類があるのでしょうか。

チェックされた例外。 プログラムの実行中に回復可能な問題を表すために使用されます。通常、プログラマーの責任ではありません。例えば、ユーザーが指定したファイルが読めない、ネットワークに接続できないなどです。これらの場合、プログラムは終了する必要はなく、ユーザーに警告する、フォールバックメカニズムに移行する(ネットワークが利用できないときにオフラインで作業するなど)などのアクションを取ることができます。

チェックされていない例外。 これも2つに分けられる。エラーとRuntimeExceptionsです。これらの例外がチェックされない理由のひとつは、これらの例外は数が多く、すべてを処理する必要があるため、プログラムが乱雑になり、明快さが損なわれるからである。もうひとつは

  • ランタイムエクスペリエンス。 通常、プログラマーによる不具合で発生する。例えば ArithmeticException のゼロ除算が発生したり ArrayIndexOutOfBoundsException が発生するのは、私たちのコーディングに十分な注意が払われていないためです。これらの現象は、通常、プログラムのロジックに何らかの誤りがあるために発生します。ですから、本番モードに入る前に、これらの問題をクリアする必要があります。つまり、このようなエラーが発生した場合、プログラマーは開発やテストの段階で解決できるように、プログラムを失敗させなければならないのです。

  • エラーです。 エラーとは、通常、プログラムが回復できない状況のことです。例えば StackOverflowError が発生した場合、プログラムの関数呼び出しスタックのサイズを大きくするなど、多くのことができなくなります。あるいは、もし OutOfMemoryError が発生した場合、プログラムで利用可能なRAMの量を増やすことはできません。このような場合は、プログラムを終了させるのがよいでしょう。そのため、チェックを外すようにしているのです。

詳細な情報はこちらをご覧ください。