0.类与方法
java.lang.
Throwable
类。描述一条可抛出的信息。
java.lang.Throwable. Throwable()
构造函数,jvm自动填充StackTraceElement信息。
StackTraceElement[] java.lang.Throwable. getStackTrace()
获取StackTraceElement的数组。第0条代表当前行。
java.lang. StackTraceElement
代表一条栈回溯信息。每进入一层函数调用,就多了一条StackTraceElement。
类。描述一条可抛出的信息。
java.lang.Throwable. Throwable()
构造函数,jvm自动填充StackTraceElement信息。
StackTraceElement[] java.lang.Throwable. getStackTrace()
获取StackTraceElement的数组。第0条代表当前行。
java.lang. StackTraceElement
代表一条栈回溯信息。每进入一层函数调用,就多了一条StackTraceElement。
1.源文件与当前行
使用java代码感知源文件与当前行。
见代码示例。
2.感知调用栈
void java.lang.Throwable.
printStackTrace(PrintWriter s)
栈回溯信息输出到指定的地方。
栈回溯信息输出到指定的地方。
3.log4j打印
void org.apache.log4j.Category.
info(Object message, Throwable t)
info信息也可以打印回溯栈。
info信息也可以打印回溯栈。
4.代码示例
import java.io.PrintWriter;
import java.io.StringWriter;
public class ThrowableAndLine
{
public static void main(String args[])
{
System.out.println("This is " + getCurrentLineInfo());
System.out.println( "\ngetTrace()\n"+getTrace());
}
public static String getCurrentLineInfo()
{
//注意是报告上层调用的行数
StackTraceElement ste = new Throwable().getStackTrace()[1];
return ste.getFileName() + ": Line " + ste.getLineNumber();
}
public static String getTrace()
{
Throwable t=new Throwable();
StringWriter stringWriter=new StringWriter();
PrintWriter pWriter=new PrintWriter(stringWriter);
t.printStackTrace(pWriter);
pWriter.close();
return stringWriter.toString();
}
}
/*
* This is ThrowableAndLine.java: Line 8
getTrace()
java.lang.Throwable
at ThrowableAndLine.getTrace(ThrowableAndLine.java:22)
at ThrowableAndLine.main(ThrowableAndLine.java:9)
*/