2010-12-13 14 views
2

私は、Javaのチェック例外に関する多くの発言を見てきましたが、何か他のもの(多くの場合C#)がこの点に関して実質的に異なる/優れていることを暗示しています。私は言語戦争の面に興味はありませんが、チェック例外を除いた言語がJavaのモデルとどのように違うのかを知りたいと思います。 Javaの例外をすべてRuntimeExceptionに変更すると同じ結果になるでしょうか?チェックされていない例外(ex C#)とJava-esque例外との違いは何ですか?

Javaは、システムエラー(ディスクがいっぱいでネットワーク接続エラー)でチェック例外を使用し、プログラマーエラー(無効な配列インデックス、型変換エラー)でチェックを外します。チェックされていない例外を除いた言語は、この区別を別の方法で保持していますか、まったく同じ扱いですか?誰かが主観閉じるために投票しているので


、私は再び強調します:私は言語の人々がより良いと思いを気にしません。私は、異なる例外モデルを使用するときにプログラマーがコード化しなければならない実際の操作上の違いについてのみ質問しています。私はJavaバージョンを経験しているだけなので、他の方法がどのように動作するかを調べようとしています。

+0

ちょっとした話題:はい、すべてのJava例外を変更してRuntimeExceptionを拡張すると同じ結果になります。 –

答えて

3

2つの言語の例外には基本的に違いはありません。

唯一の大きな違いは、Javaでは、明示的にキャッチまたはスローされないとコンパイルエラーが発生することがあります。

C#では、例外の処理方法が異なります。 A NullReferenceExceptionは、aと実質的に同じである。IOExceptionである。

C#でプログラミングする場合は、エラーが発生する可能性があり、どのようなエラーが発生する可能性があるかを知る必要があります。 Javaでは、コントロールから何かが間違っているケースを処理するように思い出させることで、簡単になります。

+0

"C#は例外を処理しません。" - どういう意味ですか? – Greg

+0

@Greg、私は私の文章を終えるのを忘れました。おっとっと。一定。 – jjnguy

+1

実際、C#ではいくつかの例外を特別なものとして扱います。主なものはAccessViolationExceptionです。 catch(Exception e)はシステム生成のcatchを行いません。 – Joshua

1

チェックされている例外の主な問題は、例外が発生しないようにコードを記述するか、そうであれば気にしないことです。回復不可能な例外などが含まれます。次に、ユーザーがチェック例外を終了するかどうか気にしない場合を考えなければなりません。これは、愛好家や学生の開発者です。今度は、チェックされたすべての例外、たとえあなたがブルームーンで火星のJVMを実行した場合にのみ発生する可能性のあるすべての関数をマークしなければなりません。

チェック例外はC++のconst正しさと似ていますが、それらは素晴らしいアイデアですが、言語はもっとも原始的な実装しかなく、全体を包囲する比喩的な赤いテープの量は、悪いことをするのは簡単ではありません。

例外をチェックした他の言語については分かりません。

C++では、プリミティブ操作はスローされず、より高度な操作やライブラリ関数の多くはスローされません。通常、C++では例外がほとんどありません。私は本当にC#について話すことができません。 C++の問題点は、未処理の例外が発生した場合、デバッガはどこから来たのかを簡単に伝えることができるため、デバッグするのが比較的簡単で、反復的なキャッチがたくさんあるためです。

+0

確認済みの例外を維持するためのIDEが必要です。あなたがそれをする必要があるのは残念ですが、IDEがそれを実現させるのは残念です。私が見ているような頭痛はありません。 –

+0

@Peter:チェックされた例外を管理するJava IDEは見たことがありません。 – Puppy

+0

IntelliJ CE(無料版)では、チェック例外をスローすると2つの自動修正が行われます。メソッド署名に例外を追加する場合は、メソッド署名を単純化するために例外を構成し、必要に応じてそれらを親インタフェース/オーバーライドメソッドに追加することを提案します。コードを手動で変更することなく、ネストされたメソッドでチェック例外をスローすることができます。逆に、スローされていない「スロー」内のチェック例外を削除するか、スローしません。 IOExceptionから、より具体的な例外に –

0

私が見つけたように、Javaのチェック例外は、より高度な(再利用可能な)アルゴリズムを初めて作成する必要がある場合には壊れています。

関連する問題