Given:
23.int z=5;
24.
25. public void stuff1(int x) {
26. assert (x> 0);
27. switch(x) {
28. case 2: x= 3;
29. default: assert false; } }
30.
31. private void stuff2(int y) { assert (y < 0); }
32.
33. private void stuff3() { assert (stuff4O); }
34.
35. private boolean stuff4() { z = 6; return false; }
Which is true?
A. All of the assert statements are used appropriately.
B. Only the assert statement on line 31 is used appropriately.
C. The assert statements on lines 29 and 31 are used appropriately.
D. The assert statements on lines 26 and 29 are used appropriately.
E. The assert statements on lines 29 and 33 are used appropriately.
F. The assert statements on lines 29, 31, and 33 are used
appropriately.
G. The assert statements on lines 26, 29, and 31 are used
appropriately.这题应该选什么?我感觉很乱,恰当怎么判断?

解决方案 »

  1.   

    33我觉得总是不对的吧 stuff4O 是什么  呵呵
    29嘛  assert false; 都false了还assert做什么 呵呵
    其他还算合理吧
      

  2.   

    首先要明白:assert是方便调试使用的;它的主要作用就是用来猜测不太确定的东西;
    所以:
    26. assert (x> 0); 
    -------------------
    x的大小如果小于0,那么还要下面的switch语句做什么?所以,显得多余!!
    29. default: assert false; } }
    -----------------
    这一句主要检验switch语句在没有使用break时,是否会继续向后执行(此处只有default)!可想而知,在这里是一定会报错的。那么说明default被执行!!!
    31. private void stuff2(int y) { assert (y < 0); } 
    ---------------------------
    如果y>0,那就会抛出异常,否则不抛!这样做的目的是方便调试者能够判断y的值是大于0还是小于0!
    33. private void stuff3() { assert (stuff4O); } 
    --------------------
    这应该是assert (stuff4()); 吧??再看看“35. private boolean stuff4() { z = 6; return false; } ”这一行,这不管怎么调用,都是返回false,而stuff3的函数体中就莫名其妙地抛出一个断言异常,你能从这样的一个断言异常中判断出某一个东西的值或状态吗??基本上是做无用功!!所以在这个程序中29,31用的恰当!!
      

  3.   

    assert是调试的时候用的,正常发布的时候通常关掉。所以,没看到哪里用的正常。如果开发,我会用log
      

  4.   

    assert 一般在流程控制语句中   检查私有方法的参数   方法的返回值    确定不变值的时候使用