[解決済み] なぜJavaの人は例外を黙って消費することが多いのか?
疑問点
私はこれまで本格的なJavaコーディングをしたことはありませんが、構文、ライブラリ、およびコンセプトは、私の既存のスキル (Delphi & C#) に基づいて学びました。 私がほとんど理解していないことの 1 つは、例外を静かに消費する多くのコードを
printStackTrace
の後に黙って例外を消費するコードをたくさん見たことです。
public void process() {
try {
System.out.println("test");
} catch(Exception e) {
e.printStackTrace();
}
}
私が遭遇したほとんどすべてのJavaの記事&プロジェクトで、このような同様のコードがあります。私の知識では、これは非常に悪いことです。例外はほとんど常にこのように外側のコンテキストに転送されるべきです。
public void process() {
try {
System.out.println("test");
} catch(Exception e) {
e.printStackTrace();
throw new AssertionError(e);
}
}
ほとんどの場合、例外は基礎となるフレームワーク(例えばJava Swing)に属する一番外側のループで処理されることになるはずです。なぜ、Javaの世界ではこのようなコーディングをするのが当たり前のように見えるのでしょうか。困惑しています。
私の経歴からすると、printStackTraceを削除して
を完全に
. 私は単に未処理のアカとして再スローします。
RuntimeException
(あるいは、さらに良いことに
AssertionError
) で、最も適切な場所、つまりフレームワークの一番外側のループでそれをキャッチしてログに記録します。
public void process() {
try {
System.out.println("test");
} catch(Exception e) {
throw new AssertionError(e);
}
}
どのように解決するのですか?
私は常々、次のようなシナリオに類似していると考えています。
ある男が撃たれた。
彼は息を止め、バスに乗るだけの力を持っています。
10マイル後、男はバスを降り、2ブロックほど歩いて、死んだ。
警察が死体を発見したとき、何が起こったのか手がかりがない。いずれはそうなるかもしれませんが、それはずっと難しいことです。
より良いのは
<ブロッククオート"男が撃たれ、彼は即死し、死体はちょうど殺人が起こった場所に横たわっています。
警察が到着すると、すべての証拠が揃っている。
システムが故障するならば、より良いのは 早く故障する
質問に対応する。
-
無知であること
-
+
- ナマケモノ
EDITです。
もちろん、キャッチの部分は便利です。
例外で何かができるのであれば、そこで行うべきでしょう。
おそらくそれは与えられたコードのための例外ではなく、おそらくそれは期待されたものです(私の例えでは防弾チョッキのようなもので、男は最初の場所で撃たれるのを待っていたのです)。
そして、そうです、catchは 抽象化に適した例外を投げる
関連
-
アクセス制限です。タイプ 'Application' は API ではない(必要なライブラリに制限がある)。
-
名前 'XXX' を持つ Bean の作成に失敗しました。自動依存関係の注入に失敗しました 解決方法
-
[解決済み] なぜJavaにはtransientフィールドがあるのですか?
-
[解決済み] 特定のUnicode文字を含むコメントでのJavaコードの実行が許可されているのはなぜですか?
-
[解決済み] 複数のJava例外を同じcatch節でキャッチすることはできますか?
-
[解決済み] Javaにおけるチェック済み例外とチェックされていない例外の理解
-
[解決済み] Javaにおける例外処理によるパフォーマンスへの影響とは?
-
[解決済み】C#で例外をキャッチして再スローする理由とは?
-
[解決済み】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 -jarコマンドでパッケージを実行すると、無効または破損したjarfile xxxx.jarが表示される。
-
Java Notes 005_この行に複数のマーカーがある - キーを変数に解決できない - シンタックスエラー、ins
-
セミコロン期待値エラー解決
-
Javaがテキストファイルを読み込む
-
代入の左辺は変数でなければならない 解答
-
Javaがエラーで実行される、選択が起動できない、最近起動したものがない
-
Web Project JavaでPropertiesファイルを読み込むと、「指定されたファイルがシステムで見つかりません」というソリューションが表示されます。
-
git pull appears現在のブランチに対するトラッキング情報がありません。