throws Exception
宣言は、予想されるが避けられない理由で例外をスローする可能性のあるメソッドを追跡する自動化された方法です。throws IOException
宣言は通常、またはなどのスローされる可能性のある1つまたは複数の例外のタイプに固有throws IOException, MyException
です。
ゼロ除算や範囲外のインデックスなど、プログラムを実行する前に予期していなかったことが原因で、予期せず停止し、例外を報告するコードを作成するか、最終的に作成する予定です。エラーはメソッドで予期されていなかったため、「キャッチ」してtrycatch句で処理することはできませんでした。メソッドの疑いを持たないユーザーもこの可能性を知らず、プログラムも停止します。
プログラマーが特定のタイプのエラーが発生する可能性があることを知っているが、メソッドの外部でこれらの例外を処理したい場合、メソッドは、それらを処理する代わりに、呼び出し元のメソッドに1つ以上のタイプの例外を「スロー」できます。メソッドが例外をスローする(可能性がある)ことをプログラマーが宣言しなかった場合(またはJavaに例外を宣言する機能がなかった場合)、コンパイラーはそれを知ることができず、メソッドの将来のユーザーが知る必要があります。メソッドがスローする可能性のある例外をキャッチして処理します。プログラムには多くの異なるプログラムによって記述されたメソッドの多くの層が含まれる可能性があるため、どのメソッドが例外をスローする可能性があるかを追跡することは困難(不可能)になります。
Javaには例外を宣言する機能がありますが、未処理および未宣言の例外を使用して新しいメソッドを作成できます。Javaはそれをコンパイルし、実行して最高のものを期待できます。Javaで許可されないのは、例外をスローするものとして宣言されたメソッドを使用する場合、メソッドで宣言された例外を処理するか、メソッドを同じものをスローするものとして宣言しない限り、新しいメソッドをコンパイルすることです。例外または複数の例外がある場合は、一部を処理して残りをスローできます。
メソッドが特定のタイプの例外をスローすることをプログラマーが宣言する場合、それは、メソッドを使用する他のプログラマーに例外が発生する可能性があることを警告する自動化された方法にすぎません。次に、プログラマーは、呼び出し元のメソッドも同じ例外をスローすることを宣言することにより、例外を処理するか、警告を渡すかを決定できます。コンパイラは、この新しいメソッドで例外が発生する可能性があることを警告されているため、新しいメソッドの将来の呼び出し元が例外を処理するかどうかを自動的にチェックするか、例外を宣言していずれかを強制的に発生させることができます。
このタイプのソリューションの良いところは、コンパイラーが報告Error: Unhandled exception type java.io.IOException
すると、例外をスローするように宣言されたメソッドのファイルと行番号を提供することです。次に、単純にドルを渡すことを選択し、メソッドが「IOExceptionをスローする」ことも宣言できます。これは、メインメソッドまで実行できます。メインメソッドでは、プログラムが停止し、ユーザーに例外が報告されます。ただし、例外をキャッチして、何が起こったのか、どのように修正するのかをユーザーに説明するなど、適切な方法で処理することをお勧めします。メソッドが例外をキャッチして処理する場合、例外を宣言する必要はありません。いわば、ドルはそこで止まります。