首页 / 操作系统 / Linux / 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); } }