继承链中的异常

心得：
demo3
应用程序底层函数，可以尽可能的抛出比较详细类型的异常，如RelayExp；但程序最外层一般也需要尽可能详细的获取该异常；但中间层，异常某些信息，如错误码、错误描述等需要变更、增加更详细的描述时，我们可以在中间层用继承链中的父类去接收该异常,并对异常信息进行修改，并用throw抛出。注意，这里要用throw，而不是throw obj；因为单throw时会抛异常发生时的真实类型，但throw obj则只能抛obj的类型。