どのような状況で使用しますか?assert()を使用するタイミングとtry catchを使用するタイミング
答えて
try ... catch - 例外条件、すなわち不正なコードによって引き起こされないが、外部の予測不可能なイベントによって正常な制御フローを変更する可能性のある条件。内部メソッドがなど
、(パブリックAPIのためにあなたはまだそのための例外をお勧めします)、右引数で呼び出された場合、すなわち、無効なコード、不変の機能に保持されている場合、チェックチェックをキャッチ ためアサーション
これは私の基本的なガイドラインですが、規約は状況によって異なり、言語によっても異なります。
あなたが疑問にいるとき、あなた自身に尋ねることができます:は、特定の安全確認は、我々はすべてをテストし、終了した後も、リリースコードであっすることになっていることでしょうか?あなたが "はい、それはまだ必要です"と答えた場合は、おそらく例外が必要です。それ以外の場合は、おそらくアサーションが必要です。
通常、assert()
はリリースコードでは機能しないため、try-catch
戦略に置き換えることはできません。それにもかかわらず、私は例外がスローされる場所でassert()
を使用するのが好きです。私にとっては(開発者として!)、例外スタックよりもエラーの行にassert()
というメッセージを送るほうがしばしば便利です。
さまざまな目的のために作成されています。 Assert
はバグを発見するためのものです。try-catch
は例外的な状況を処理するためのものです。
try-catchとassertの状況はまったく異なります。 Assertは、パラメータとして受け取った値が予期されるかどうかを確認するために使用されます。生産コードでassertを使用することはお勧めできません。単体テストで使用されており、ほとんどパラメータをチェックすることはほとんどありません。 のようなものを使用することをお勧め渡された値を確認するには:あなたがブロック内の何かが間違って行くことができます知っているとき
public void test(int i) {
if (i < 0) {
throw new IllegalArgumentException("i cannot be less than 0");
}
...
}
try-catchブロックが使用されています。たとえば、sdcardに書き込むと、書き込むスペースがありません。あるいは、あなたはそれを境界線から読み取ろうとしました。その後、あなたは、try-catchブロックで、あなたの重要なコードを入れて、excpetionsの確認:例外に関する
try {
InputStream is = new FileInputStream("filename.txt");
...
} catch FileNotFoundExcpetion {
System.out.println("file not found");
} finally {
...
}
Moreとブロックキャッチしてみてください。
- 1. タスクを使用するタイミングとスレッドを使用するタイミング
- 2. undef_methodを使用するタイミングとremove_methodを使用するタイミングは?
- 3. viewDidLoadを使用するタイミングとawakeFromNibを使用するタイミング
- 4. "return result"を使用するタイミングと "self.result"を使用するタイミング
- 5. Task.Runを使用するタイミングasync-awaitを使用するタイミングと組み合わせて使用するタイミング
- 6. BackboneJS:フェッチを使用するタイミングと同期を使用するタイミング
- 7. ワンホットエンコーディングを使用するタイミングとダミー変数を使用するタイミング
- 8. Codeigniter redirect()を使用するタイミングと、$ this-> load-> viewを使用するタイミング
- 9. Requirejsを使用するタイミングとバンドルされたjavascriptを使用するタイミング
- 10. バイト配列を使用するタイミングとストリームを使用するタイミング
- 11. ES6クラスを使用するタイミングとjavacriptの機能を使用するタイミング
- 12. コマンドウィンドウを使用するタイミング
- 13. ServletRequestListenerを使用するタイミング
- 14. ビジュアルディフィーリングとユニファイドディフパッチファイルを使用するタイミングは?
- 15. GETとリンクを使用するタイミング
- 16. 既存ブランチを使用するタイミングと新しいブランチを作成するタイミング
- 17. Simpy - 歩留まりを使用するタイミングと関数を呼び出すタイミング
- 18. boto3クライアントを使用するタイミングとboto3リソースを使用するタイミングを教えてください。
- 19. isInstanceOfを使用するタイミングと、(Scalaで)match-case-statementを使用するタイミングを教えてください。
- 20. "as"キーワードを使用するタイミングと、キャストを使用するタイミングを教えてください。
- 21. JDKを使用してアプリケーション(javaw.exe)を起動するタイミングと、JREを使用するタイミング
- 22. スキームまたはラケットで関数を使用するタイミングとマクロを使用するタイミング
- 23. Big O表記を使用するタイミングと大きなTheta表記を使用するタイミング
- 24. マルチキャッチを使用するタイミングと再使用するタイミングを教えてください。
- 25. 静的バインディングを使用するタイミングとJavaで動的バインディングを使用するタイミング
- 26. plugins.withType(somePlugin)を使用するタイミング.whenPluginAdded
- 27. Springでアプリケーションコンテキストを使用するタイミング。
- 28. JDO DataNucleusを使用するタイミングQuery.close()
- 29. Spark2.0でrddを使用するタイミングは?
- 30. getAutowireCapableBeanFactory()。autowireBean(someBean)を使用するタイミングは?
これは主な違いです。アサーションコードは条件付き属性に帰属するため、リリースビルドでスキップすることができます。 –