Java EE 项目中异常处理


  我们在定义一个新的异常类时,必须提供这样一个可以包含嵌套异常的构造函数。并有一个私有成员来保存这个“起因异常”。java 代码

  public Class ExceptionB extends Exception{

  private Throwable cause;

  public ExceptionB(String msg, Throwable ex){

  super(msg);

  this.cause = ex;

  }

  public ExceptionB(String msg){

  super(msg);

  }

  public ExceptionB(Throwable ex){

  this.cause = ex;

  }

  }

  当然,我们在调用printStackTrace方法时,需要把所有的“起因异常”的信息也同时打印出来。所以我们需要覆写printStackTrace方法来显示全部的异常栈跟踪。包括嵌套异常的栈跟踪。java 代码

  public void printStackTrace(PrintStrean ps){

  if(cause == null){

  super.printStackTrace(ps);

  }else{

  ps.println(this);

  cause.printStackTrace(ps);

  }

  }

  一个完整的支持嵌套的checked异常类源码如下。我们在这里暂且把它叫做NestedExceptionjava 代码

  public NestedException extends Exception{

  private Throwable cause;

  public NestedException (String msg){

  super(msg);

  }

  public NestedException(String msg, Throwable ex){

  super(msg);

  This.cause = ex;

  }

  public Throwable getCause(){

  return (this.cause == null ? this :this.cause);

  }

  public getMessage(){

  String message = super.getMessage();

  Throwable cause = getCause();

  if(cause != null){

  message = message + “;nested Exception is ” + cause;

  }

  return message;

  }

  public void printStackTrace(PrintStream ps){

  if(getCause == null){

  super.printStackTrace(ps);

  }else{

  ps.println(this);

  getCause().printStackTrace(ps);

  }

  }

  public void printStackTrace(PrintWrite pw){

  if(getCause() == null){

  super.printStackTrace(pw);

  }

  else{

  pw.println(this);

  getCause().printStackTrace(pw);

  }

  }

  public void printStackTrace(){

  printStackTrace(System.error);

  }

  }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 下一页

相关内容