码迷,mamicode.com
首页 > 编程语言 > 详细

【Java】控制异常在控制台输出

时间:2015-04-09 12:01:42      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:异常   java   控制台   javaweb   编程   

每次在Java程出现问题,总会抛出一大堆异常,让人眼花缭乱,在Javaweb编程的时候尤甚,让人很难找到出错的位置,

尤其在你网络工程文件多、插件多、框架的时候,各种插件、框架连锁,导致你更难找到出错的位置。

其实异常在控制台输出是可以控制的。

关键是利用到,这个方法与数组、对象都是java自带的,不用引入任何东西:

StackTraceElement[] stacks = new Throwable().getStackTrace();
这个操作。

先看一段程序,

public static void exceptionMethodUnhandle() {
	int a = 1;
	int b = 0;
	System.out.println(a / b);
}
这段程序很明显存在除0异常,直接运行会出现如下的错误:

技术分享

我们要先找到,在第41行的exception的方法中的主函数main放大中出错,然后倒回去看,然后在第35行exception这个类中的exceptionMethodUnhandle这个方法中出错。

果真在第35行有a/b这个除0问题。

但是,在一些大型项目编程,会吐出一堆异常,你很难这样一步一步倒推。

把程序改成这样的话:

public static void exceptionMethod() {
	try {
		int a = 1;
		int b = 0;
		System.out.println(a / b);
	} catch (Exception e) {
		System.out.println(getTraceInfo());
	}
}
要求Java经过getTraceInfo()方法输出错误的话:

public static String getTraceInfo() {
	StringBuffer stringBuffer = new StringBuffer();
	StackTraceElement[] stacks = new Throwable().getStackTrace();
	stringBuffer.append("Exception in [class: ")
			.append(stacks[1].getClassName()).append("][method: ")
			.append(stacks[1].getMethodName()).append("][line: ")
			.append(stacks[1].getLineNumber() + "]");
	return stringBuffer.toString();
}
输出结果接变成这样了:

技术分享

直接指明在本程序的Exception类的exceptionMethod方法中出现异常。

之所以能够这样输出,我们要关注getTraceInfo()这个方法的StackTraceElement[] stacks = new Throwable().getStackTrace();方法。

这个数组如下:

技术分享

可以看到,本数组第0个元素,是它自己,然后第1个元素,是导致它出现的方法、类与行数,第2个元素则记录了导致第一个元素出错的方法、类与行数,也就是说,导致出错的根本原因就是此数据的第一个元素。

因此我们在某些情况,仅仅输出这个元素就可以了。不用被长长的异常刷屏。

如果程序正常,根据java的try与catch,是根本不可能触发catch这段方法的。例如如下整个程序,先执行normalMethod()则正常输出1,执行exceptionMethod()才输出异常,最后执行exceptionMethodUnhandle()则默认输出整个异常:

public class exception {
	public static String getTraceInfo() {
		StringBuffer stringBuffer = new StringBuffer();
		StackTraceElement[] stacks = new Throwable().getStackTrace();
		stringBuffer.append("Exception in [class: ")
				.append(stacks[1].getClassName()).append("][method: ")
				.append(stacks[1].getMethodName()).append("][line: ")
				.append(stacks[1].getLineNumber() + "]");
		return stringBuffer.toString();
	}

	public static void normalMethod() {
		try {
			int a = 1;
			int b = 1;
			System.out.println(a / b);
		} catch (Exception e) {
			System.out.println(getTraceInfo());
		}
	}

	public static void exceptionMethod() {
		try {
			int a = 1;
			int b = 0;
			System.out.println(a / b);
		} catch (Exception e) {
			System.out.println(getTraceInfo());
		}
	}

	public static void exceptionMethodUnhandle() {
		int a = 1;
		int b = 0;
		System.out.println(a / b);
	}

	public static void main(String args[]) {
		normalMethod();
		exceptionMethod();
		exceptionMethodUnhandle();
	}

}
运行结果如下:

技术分享

【Java】控制异常在控制台输出

标签:异常   java   控制台   javaweb   编程   

原文地址:http://blog.csdn.net/yongh701/article/details/44956417

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!