Question 82
Given a method that must ensue that its parameter is not null: 
11. public void someMethod(Object value) { 
12. // check for null value 
....
20. System.out.println(value.getClass()); 
21. } 
What, inserted at line 12, is the appropriate way to handle a null 
value? 
A. assert value == null; 
B. assert value !null, “value is null”
C. if (value == null) { 
throw new AssertionException(“value is null”)
D. if (value == null) { 
throw new IllegalArgumentException(“value is null”)
Answer: D请问各个答案有什么区别啊?也就是我搞不明白为什么D可以而其它答案不可以啊?谢谢。。

解决方案 »

  1.   

    首先,一定要抛出异常的,否则,后面的方法调用就有问题了(报错,程序就运行失败了),
    断言不是很懂,不过d的异常抛的应该是没问题,IllegalArgumentException表示传递了不合法的参数,应为要调用value.getClass()方法,value为null确实是不合法的
      

  2.   

    题目要求要保证参数不为空。所以如果为空就要停止改方法的执行。所以c,d都可以。但是c抛出异常的类型不对。故选d。
      

  3.   

    A. assert value == null; 
    B. assert value !null, “value is null” 
    C. if (value == null) { 
    throw new AssertionException(“value is null”) 
    D. if (value == null) { 
    throw new IllegalArgumentException(“value is null”) 
    A,选A的话,只判断value是否为空,不是空就算了,如果是空呢,程序还要继续向下执行,则会发生异常
    B,B是什么意思,是输出“value is null” 么,如果是的话,和A没什么区别,只是比A多了一个输出状况,同样发生异常
    C,抛出异常,但抛出的异常类型不对
    D,IllegalArgumentException抛出的异常表明向方法传递了一个不合法或不正确的参数。 如果判断是否为null,异常应该是NullPointerException吧
    NullPointerException 当应用程序试图在需要对象的地方使用 null 时,抛出该异常。这种情况包括: 
    调用 null 对象的实例方法。 
    访问或修改 null 对象的字段。 
    将 null 作为一个数组,获得其长度。 
    将 null 作为一个数组,访问或修改其时间片。 
    将 null 作为 Throwable 值抛出。 
    应用程序应该抛出该类的实例,指示其他对 null 对象的非法使用