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
沒有留言:
張貼留言