异常学习小结:
1.所有的异常都是由Throwable继承再来的,下一层分为Error和Exception。
2.Error描述了java运行时系统的内部错误和资源耗尽错误,如outofmemory
3.Exception 有两个分支,分为RuntimeException和IOException。
RuntimeException 一般包含ClassCastException、ArrayIndexOutOfBoundsException、NullPointException异常,和派生于Error类的异常并称为“未检查异常”,其它情况称为“已检查异常”。
4. 可自己创建异常类,只需要派生于Exception或者是其子类即可。
5.再次抛出异常与异常链
可在catch内再次抛出异常
try { throw new Exception(); } catch (Exception e) { Throwable se = new ServletException("出错了~~~"); se.initCause(e); Throwable ee = se.getCause();//可以获得其原始异常,此例throw的就是Exception,所以原始异常也是这个 System.out.println("ee=" + ee); throw se; }
6.堆栈跟踪元素
public class ExceptionTest { public static void t1(){ t2(); } public static void t2(){ t3(); } public static void t3(){ Throwable t = new Throwable(); StackTraceElement[] st = t.getStackTrace(); for (int i = 0; i < st.length; i++) { System.out.println(st[i]); } } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub t1(); } }
结果:
exception.ExceptionTest.t3(ExceptionTest.java:16) exception.ExceptionTest.t2(ExceptionTest.java:12) exception.ExceptionTest.t1(ExceptionTest.java:8) exception.ExceptionTest.main(ExceptionTest.java:28)
跟踪其getStackTrace所在方法的被调用情况,采用堆栈存储形式,后进先出。