`
李灵晖-raylee
  • 浏览: 128661 次
博客专栏
Group-logo
从头认识java
浏览量:0
文章分类
社区版块
存档分类
最新评论

从头认识java-10.5 栈轨迹和重新抛出异常

 
阅读更多

这一章节我们来讨论一下出现异常的时候的栈轨迹和重新抛出异常。

1.栈轨迹

打印栈轨迹有两种方式:

(1)不改变原先的代码

package com.ray.ch10;

public class Test {
	public static void main(String[] args) {
		try {
			throw new Exception("cause");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

输出:

java.lang.Exception: cause
at com.ray.ch10.Test.main(Test.java:6)

(2)自定义打印方法栈轨迹

package com.ray.ch10;

public class Test {
	public static void main(String[] args) {
		try {
			throw new Exception("cause");
		} catch (Exception e) {
			for (StackTraceElement element : e.getStackTrace()) {
				System.out.println(element.getMethodName());
				System.out.println(element.getFileName());
				System.out.println(element.getClassName());
				System.out.println(element.getLineNumber());
			}
		}
	}
}

输出:

main
Test.java
com.ray.ch10.Test
6


我们对比一下两个代码块的输出,其实下面的那个输出就是上面输出的组成元素。


2.重新抛出异常。

有些时候我们不需要在某一层次来处理异常,特别是web应用主流的mvc结构,不同层级管理不同的东西,但是有些时候我不想在某层处理异常,那么我需要重新抛出异常。

package com.ray.ch10;

public class Test {
	
	private void test() throws Exception {
		try {
			throw new Exception("cause");
		} catch (Exception e) {
			throw e;
		}
	}
	
	public static void main(String[] args)  {
		try {
			new Test().test();
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("处理代码");
		}
	}
}

输出:

java.lang.Exception: cause
at com.ray.ch10.Test.test(Test.java:7)
at com.ray.ch10.Test.main(Test.java:15)
处理代码


从代码和输出那里可以看见,我虽然在test方法里面抛异常,但是我这里不管,再扔出去到上一次,main方法里面来处理。


总结:我们这一章节主要讨论了栈轨迹和重新抛出异常。


这一章节就到这里,谢谢。

-----------------------------------

目录



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics