JAVA查看常见异常信息的处理方法
https://www.cnblogs.com/chenxiao3602/p/14934422.html
Java语言的异常类Exception包含着异常的全部信息。
现设异常的实例名为ex,所有的异常都是一个除以0的表达式(int i = 1 / 0)所触发的:
1、通过ex.getMessage()可以获取异常信息,如
/ by zero
2、通过ex.toString()可以获取异常类型和异常信息,如
java.lang.ArithmeticException: / by zero
3、通过ex.printStackTrace()可以直接在控制台打印异常的全部信息(包括堆栈),但该函数最好不要直接调用无参数的版本,因为这样会让控制台显示出现错乱。调用printStackTrace时,通过如下方法调用:
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
ex.printStackTrace(printWriter);
System.out.println(stringWriter.toString());
使用此方法,控制台输出的内容为:
java.lang.ArithmeticException: / by zero
at ExceptionTest.exec3(ExceptionTest.java:31)
at ExceptionTest.exec2(ExceptionTest.java:23)
at ExceptionTest.exec1(ExceptionTest.java:15)
at ExceptionTest.main(ExceptionTest.java:39)
如果使用的是Eclipse的控制台,异常类名和指明行数的错误堆栈都会生成相应的跳转链接。
4、通过ex.getStackTrace()可以获取堆栈信息,这是 ex.printStackTrace() 外的另一种获取异常堆栈信息的方法。通过此方法可以定制化输出堆栈信息。
System.out.println(ex.getClass().getName() + ": " + ex.getMessage());
StringBuilder sbException = new StringBuilder();
for (StackTraceElement ele : ex.getStackTrace()) {
sbException.append(MessageFormat.format("\tat {0}.{1}({2}:{3})\n",
ele.getClassName(), ele.getMethodName(), ele.getFileName(), ele.getLineNumber()));;
}
System.out.println(sbException);
打印出的异常堆栈为:
java.lang.ArithmeticException: / by zero
at ExceptionTest.exec3(ExceptionTest.java:31)
at ExceptionTest.exec2(ExceptionTest.java:23)
at ExceptionTest.exec1(ExceptionTest.java:15)
at ExceptionTest.main(ExceptionTest.java:39)
最后列一下完整的Java代码:
import java.io.PrintWriter;
import java.io.StringWriter;
import java.text.MessageFormat;
/**
* 异常打印测试
* @文件名称 ExceptionTest.java
* @文件作者 Tsybius2014
* @创建时间 2016年5月13日 下午6:14:08
*/
public class ExceptionTest {
/** 第一层函数 */
public static void exec1() {
try {
exec2();
} catch (Exception ex) {
throw ex;
}
}
/** 第二层函数 */
public static void exec2() {
try {
exec3();
} catch (Exception ex) {
throw ex;
}
}
/** 第三层函数 */
public static void exec3() {
try {
int i = 1 / 0;
} catch (Exception ex) {
throw ex;
}
}
/** 主函数 */
public static void main(String[] args) {
try {
exec1();
} catch (Exception ex) {
System.out.println("--- getMessage ---");
System.out.println(ex.getMessage());
System.out.println();
System.out.println("--- toString ---");
System.out.println(ex.toString());
System.out.println();
System.out.println("--- printStackTrace ---");
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
ex.printStackTrace(printWriter);
System.out.println(stringWriter.toString());
System.out.println();
System.out.println("--- printStackTrace DIY ---");
System.out.println(ex.getClass().getName() + ": " + ex.getMessage());
StringBuilder sbException = new StringBuilder();
for (StackTraceElement ele : ex.getStackTrace()) {
sbException.append(MessageFormat.format("\tat {0}.{1}({2}:{3})\n",
ele.getClassName(), ele.getMethodName(), ele.getFileName(), ele.getLineNumber()));;
}
System.out.println(sbException);
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
2022-03-17 Spring中的Bean默认是单例还是多例?如何保证并发安全?
2022-03-17 ORA-00932 :数据类型不一致:应为-,但却获得CLOB
2021-03-17 jquery replace字符串-全部替换
2021-03-17 C#使用Redis的基本操作
2021-03-17 C#实现将一个字符串进行翻转显示的6种方法
2021-03-17 Ajax上传文件到C#Action中使用 jquery.form.js
2021-03-17 ASP.NET MVC与ASP.NET Web API的区别