在TIJ中,关于异常有这样一个小例子“throw new NullPointerException("t=null")"
配备的说明是:尽管返回的异常对象其类型通常与方法设计的返回类型不同,但从效果上看,它就是从方法中返回的”这句话我没有理解,我想这里所指的方法就是NullPointerException()这个方法吧,而它返回的是NullPointerException 的一个对象,为什么说不同啊?

解决方案 »

  1.   

     你把整个函数贴出来啊,看你的描述,估计这个函数抛出一个Exception,但是类型不是NullPointerException,可能是它的基类。所有得出这个结论:“尽管返回的异常对象其类型通常与方法设计的返回类型不同,但从效果上看,它就是从方法中返回的” 
      

  2.   

    你看的是TIJ4吧?
    首先更正下你的想法,new NullPointerException()这个不是方法,这只是跟一般用new创建对象的语法是一样的。NullPointerException是运行时异常类中的空指针异常。
    A a = new A();这个语句实际上在内部做了几件事情呢?
    1.在堆(heap)中分配空间(同时调用构造函数初始化)
    2.在堆栈(stack)中创建变量a
    3.将分配空间的地址赋给a,即将对象引用传给a.
    实际上书上说的意思是:尽管用new只是在heap中创建对象,但实际上它还是返回了对象的引用。
    再看语句:  throw new NullPointerException("t=null");
    用new在heap中创建对象,然后将对象的引用传递给throw,再由throw抛出。而后如果相关程序调用此语句或此方法(此语句在方法中),那么就必须对异常做出处理(要么捕捉它,要么再继续抛出),就相当了我们调用了一个有返回值的方法,这两种类型表面看起来很相似,但其实在内部机制上是完全不同的。
    牛人bruce eckel在这里这么写只是为了让读者有一个对比...