[解決済み] 関数を呼び出すときに「throws Exception」が必要なのはなぜですか?
質問
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の量を増やすことはできません。このような場合は、プログラムを終了させるのがよいでしょう。そのため、チェックを外すようにしているのです。
詳細な情報はこちらをご覧ください。
関連
-
eclipseにプロジェクトをインポートした後、Editorにmain typeが含まれない問題
-
Methodのinvokeメソッド実装のJavaリフレクション
-
Spring BootのテストメソッドFailed to load ApplicationContextの問題を解決する
-
Java(1)仕上げの基本概念+eclipseのインストール構成
-
ブラウザでの大容量ファイルスライスアップロード(Javaサーバサイド実装)
-
[解決済み] Pythonの関数が例外を投げるかどうかをテストするにはどうすればよいですか?
-
[解決済み] Rubyで「例外 => e」を救済するのはなぜ悪いスタイルなのですか?
-
[解決済み] Javaにおける例外処理によるパフォーマンスへの影響とは?
-
[解決済み] Thread.sleep(x)またはwait()を使用すると例外が発生します。
-
[解決済み] スレッドからExceptionをキャッチする方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Java Exceptionが発生しました エラー解決
-
java の例外が発生しました java
-
ファインバグタイプ
-
サーブレットクラスのインスタンス化エラーの解決法
-
Methodのinvokeメソッド実装のJavaリフレクション
-
Spring BootのテストメソッドFailed to load ApplicationContextの問題を解決する
-
node js npm gruntインストール、elasticsearch-head 5.Xインストール
-
spring-boot 401 このリソースにアクセスするには完全な認証が必要です エラー解決
-
spring aop アドバイスからの Null 戻り値が、サマリーのプリミティブ戻り値と一致しない。
-
Exception: java.util.NoSuchElementException: 行が見つかりません