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

每次在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】控制异常在控制台输出

相关文章:

你感兴趣的文章:

标签云: