私は1Z0-851 OraclaのJava SE 1.6の認定のために勉強していると私はこの質問を見た:Javaのassert文の使用状況、試験の認定1Z0-851
私は正しいものとして最初の選択肢をマークし、失敗! "すべてのアサート文は適切に使用されています"という答えは、最初の1つがassert(x > 0);
が間違っていると答えています。
私は1Z0-851 OraclaのJava SE 1.6の認定のために勉強していると私はこの質問を見た:Javaのassert文の使用状況、試験の認定1Z0-851
私は正しいものとして最初の選択肢をマークし、失敗! "すべてのアサート文は適切に使用されています"という答えは、最初の1つがassert(x > 0);
が間違っていると答えています。
正解はあなたが正常に達することを期待していない任意の位置にアサーションを配置することができアサーション
のこの
適切かつ不適切な使用です。 アサーションを使用して、プライベートメソッドに渡されるパラメータを検証することができます。ただし、 パブリックメソッドは、アサーションが有効かどうかにかかわらず引数をチェックする必要があるため、 アサーションをパブリックメソッドに渡すパラメータの検証に使用しないでください。ただし、公開および非公開のアサーションを使用して後処理をテストすることができます メソッド。また、アサーションはプログラムの状態を変更するものではありません。
のSrc: "適切に使用" http://www.freejavaguide.com/java-scjp-part1.pdf
位置のために "前提条件"と解釈されるべき最初のassert文を読むと、関数は正のint値で正しく動作するはずであり、これは真ではありません。したがって、その主張は誤解を招きます。
この関数は、xの値に対しては機能しません。どちらかが負の数で、最初のものが失敗したか、または「偽のものがアサートされた」ものです。 – asteri
12行目は冗長です。
あなたはそれを削除した場合、ライン15上の主張は、その奇妙な表現の質問正直に言うとx <= 0
ケースをカバーしますが、それは私が見ることができるすべてです。私は適切な意味が分からない
で始まるgo2
から始めると、アサーションが分かりやすくなります。
このメソッドは何もしません、それはあなたの期待をアサートします、そのx < 0
。一方、go
の方法はswitch
である。通常の状況下で
あなたは絶対にプログラムがこの条項に該当すると期待していない場合には、default
句にassert false
に良い習慣です、すなわち、case
Sの一つが正しいことがあります。 switch
上
のみの場合は、x
が正確2
ことを期待しています。
つまり、が0
より大きくなるとは思わないでしょう。最初のアサーションで言うように、x
は2
になると思います。したがって、アサーションは適切に使用されません。 Jeffに述べたように
しかし、case
はdefault
が常にassert false
に、すべてのシナリオでは、リーディング、実行されることを意味しないbreak
を有していません。
結論:assert x > 0
は全く正しくないながらgo
方法は常に、正しく使用assert false
を行う、エラーが発生しなければなりません。
用語は、したがって、混乱、非常に主観的です。彼らはその質問を明確にすべきです。 –
またこれを見てください(http://stackoverflow.com/questions/1957645/when-to-use-assertion-vs-exception) – Amarnath
もしそれらが少量であったコードサンプルを使用したなら、意味の – asteri