问题1:请看注释,你说抛2个异常,这种模式有什么意义吗?
class MyException extends Exception{}public class Test { public static void h() throws MyException{
print("h()");  //这里的print就是 println,这是我自己定义的类。
MyException mE = new MyException();
mE.initCause(new NullPointerException()); //问题在这里。
throw mE;
}
public static void main(String[] args){
try{
h();
}catch(MyException e){
e.printStackTrace(System.out);
}finally{
print("finally");
}
}
}问题2:这个问题很简单,就是System.out 和 System.err 有什么不一样,System.err中所谓的重定向是指啥意思?问题3:这个问题更简单,是关于容器的,那就是 PriorityQueue 中,看源代码其 add 方法调用offer方法,这不是画蛇添足吗?何必再搞一个 add 方法然后里面调用 offer 方法呢?
 public boolean add(E e) {
        return offer(e);
    }

解决方案 »

  1.   

    如果你用 IDE 的话..你会发现 err 打印出的是错误信息  是 红的.. out是黑的.
      

  2.   

    1. mE.initCause(new NullPointerException()); 
    感觉这个应该异常链模式,使用MyException业务异常对NullPointerException进行了包装.以便在方法中抛出统一的异常类型.
    2.如3楼所说.out.print()是输出正常信息.应该算作正常的业务流程.err为错误信息.属于业务异常.
    3.PriorityQueue容器正如其他容器一样.add(E e)是实现了Collection接口所必须实现的方法.
      

  3.   

    err是错误信息的输出流  和正常的区别开来  就像3#说的那样  在IDE里  两者打印的信息颜色不一样
      

  4.   

    那只是为了要生成一个异常而已,如果你自己实际写程序的时候,完全可以在系统提供的异常的基础上再做修改,写出自己的异常类,可以加入自己需要的信息和数据,并且在catch块中进行相应处理。
    除了上面说的颜色不一样外,如果你使用某些自动工具,比如log文件分析工具,那么它对out和err的分析方法可能也是不同的
    可能是为了统一接口