|
bsp; break; } parent = child; } } } public void printStackTrace(PrintStream s) { // Print the stack trace for this exception. super.printStackTrace(s); Throwable parent = this; Throwable child; // Print the stack trace for each nested exception. while((child = getNestedException(parent)) != null) { if (child != null) { s.print("Caused by: "); child.printStackTrace(s); if (child instanceof ApplicationException) { break; } parent = child; } } } public void printStackTrace(PrintWriter w) { // Print the stack trace for this exception. super.printStackTrace(w); Throwable parent = this; Throwable child; // Print the stack trace for each nested exception. while((child = getNestedException(parent)) != null) { if (child != null) { w.print("Caused by: "); child.printStackTrace(w); if (child instanceof ApplicationException) { break; } parent = child; } } } public Throwable getCause() { return cause; } }
而"聪明"的读者肯定要问我那doBusiness()这个业务方法该如何包装异常呢?
public void doBusiness() throw xxxBusinessException { try { execute1(); // if it throw exception1
exexute2(); // if it throw exception 2
.... .....
} catch (exception1 e1) { throw new xxxBusinessException(e1); } catch(exception2 e2) { throw new xxxBusinessException(e2); } ........ }
也可以这样
public void doBusiness() throw xxxBusinessException { try { execute1(); // if it throw exception1
exexute2(); // if it throw exception 2
.... .....
} catch (Exception e) { // 注意很多应用在这里根本不判断异常的类型而一股脑的采用 // throw new xxxBusinessException(e); // 而这样带来的问题就是xxxBusinessException"吞掉了"RuntimeException // 从而将checked excption 与unchecked exception混在了一起!
// 其实xxxBusinessException属于checked excpetion ,它根本不应该也不能够理睬RuntimeException if(! e instanceof RuntimeException) throw new xxxBusinessException(e); } }
总结 1。JAVA的异常分为两类: checked exception & unchecked excpetion 2。应用开发中产生的异常都应该集成自Exception 但都属于checked excpetion类型 3。应用中的每一层在包装并传递异常的时候要过滤掉RuntimeException! 4。从责任这个角度看Error属于JVM需要负担的责任;RuntimeException是程序应该负担的责任;checked exception 是具体应用负担的责任 5。无论如何我们都不希望或者确切的说是不应该将RuntimeException这样的异常暴露给客户的,因为他们没有解决这个问题的责任! (责任编辑:包春林) 上一页 [1] [2]
|