總網頁瀏覽量

2016年3月23日 星期三

[Java] SCJP 例題 127

Given:
1. public class Donkey2{
2.   public static void main(Stnng[] args){
3.     boolean assertsOn = true;
4.     assert(assertsOn): assertsOn = true;
5.     if(assertsOn){
6.       System.out.println("assert is on");
7.     }
8.   }
9. }
 

If class Donkey2 is invoked twice,
the first time without assertions enabled,
and the second time with assertions enabled,
what are the results?[1]
  A. no output
  B. no output assert is on
  C. assert is on
  D. no output , An Assertion Error is thrown.
  E. assert is on , An AssertionError is thrown.
 
 
這題,真難懂...
看了解說
即使assert作用,4行也不會發生assertion error, assertOn是false才會發生assertion error 
也看不懂
 
 
另一個[2]解說  

題意為:第一次執行把assertions設為運作,第二次設為不運作。Assert 是一個在除錯階段時才會使用到的關鍵字,他可以藉由編譯器設定來開關這個功能
assert的判別式成立,則不會觸發任何事情;如果不成立,則會觸AssertionError,或是冒號後面的程序
要注意的是:AssertionError或是冒號後面的程序並不會馬上被觸發,如果把assertsOn初始直設為false,則不會印出任何東西,因為執行到if判別式時,assertsOn的值還依然是false
assert關鍵字是提供工程師在除錯階段使用,工程師可以將此關鍵字加在某個片段中測試某個數值是否有如預期。assert並不能取代if 來使用

好像懂了什麼, 題目一開始的意思地一次設為運作就是第三行 assertsOn =true 時候,
第二次不運作又表示 assertsOn = false所以第五行判斷後當然不會執行裡面敘述阿. = =
 
原來還可以這樣出題阿... 
 
 
[1] http://192.192.246.169/~wells/wiki/index.php/SCJP_1.6%E7%89%88%E8%80%83%E9%A1%8C_127 
[2] http://yaya741228.pixnet.net/blog/post/87293752-scjp-6.0%E8%80%83%E5%8F%A4%E9%A1%8C%E8%A7%A3%E6%9E%90-%28126~130%29 

沒有留言:

張貼留言