2

私はこのインタビュー http://www.artima.com/intv/handcuffs.html と、チェックされた例外に関するいくつかの記事とディスカッションを通過しました。とは言うchecked exceptionものの、Javaを導入するための未熟な実験です。バージョン管理とスケーラビリティの問題が発生する可能性があります。Bruce eckelは、例外をキャッチするための呼び出された強制を回避するために変換checked exceptionするアダプターも提供します。私はまた、からへunchecked exceptionの冬眠の動きを心に留めています。メカニズムを外したらどうなるのかな?私はまた、それが存在する必要がないことに同意します。checked exceptionunchecked exceptionchecked exceptionchecked exception

4

3 に答える 3

6

実際には、それほど多くは起こりません。VMレベルでは、すべての例外がオフになっています。これを確認するには、たとえば次のようにします。

public class A {
    public static void a() {
        /* Do nothing */
    }
}

public class B {
    public static void main(String[] args) {
        A.a();
    }
}

これらのクラスをそれぞれのファイルA.javaに保存しB.java、コンパイルします。次に、A次のように変更します。

public class A {
    public static void a() throws Exception {
        throw(new Exception("foo"));
    }
}

再コンパイルA.javaせずに再コンパイルしB.javaます。次に、を実行すると、VMがリンケージエラーなどを文句を言わずに、プログラムをあたかもそれであるかのように伝播および終了することBからスローされた例外が表示されます。ARuntimeException

チェックされた例外は、Java言語の構文レベルの機能にすぎません。これを削除しても、VMの実装や言語モデルに1ビットの影響はありません。

于 2013-01-01T01:47:01.590 に答える
1

チェックされた例外メカニズムを削除するとどうなるでしょうか。

簡単に言えば、技術レベル1では何も起こらないということです。

ただし、チェックされた例外は実際には良いことだと信じているJavaプログラマーの大部分から、長くて大きな不満があります...または少なくとも、単に区別を削除するよりも優れています。

過去15年以上にわたるJava言語の作成の進化に責任を持つ人々は、本質的に保守的なアプローチを取り、下位互換性のある変更を行うだけであり、それが良いことであると広く受け入れられた場合に限ります。したがって、チェックされた/チェックされていない区別を削除することは「興味深い」提案ですが、Java(IMO)では発生しない可能性があります。


1-理論的には、機能がコンパイラに依存するコードや、誤って処理されたチェック済み例外をエラーとしてフラグを立てるコードがある可能性があります...しかし、これが理にかなっている状況に遭遇したことはありません。

于 2013-01-01T03:15:10.693 に答える
1

チェックされた例外は、Javaコンパイラでのみ意味があります。JVMはチェックされた例外とチェックされていない例外を区別しません。したがって、Oracleは両方の方法でそれを行うことができ、チェックされた例外の処理を制御するコンパイラ引数を提供できます。

-Xchecked-exception-handling: (neutral|throws|strict)

Oracleがこの戦略を検討したかどうかはわかりません。私はどちらか/または命題について読んだだけです。

とにかく、それまでは、Manifoldコンパイラプラグインを使用して同じ目標を達成できます。チェックされた例外を無効にします。例外プラグインオプションを有効にすると、チェックされた例外はチェックされていない例外とまったく同じように動作します。ボイラープレートのナンセンスを試行/キャッチ/ラップ/再スローする必要はありません。意図しない例外を飲み込む必要もありません。ラムダの使用法の競合もありません。

于 2019-04-03T00:05:17.497 に答える