简介
本文介绍Java如何打印文件名、类名、方法名、行号。
IDE工具
Idea:可以通过快捷键模板生成打印信息:File=> Settings=> Editor=> Live Templates=>
本处我将打印类名、方法、行号的快捷键设为:soutd
线程栈
文件名:Thread.currentThread().getStackTrace()[1].getFileName()
类名:Thread.currentThread().getStackTrace()[1].getClassName()
方法名:Thread.currentThread().getStackTrace()[1].getMethodName()
文件名:Thread.currentThread().getStackTrace()[1].getLineNumber()
例如:可以在想要调试的地方直接调用以下语句
System.out.println(String.format("%s : %s : %s : %d",
Thread.currentThread().getStackTrace()[1].getFileName(),
Thread.currentThread().getStackTrace()[1].getClassName(),
Thread.currentThread().getStackTrace()[1].getMethodName(),
Thread.currentThread().getStackTrace()[1].getLineNumber()));
可以直接将上边这个代码写到template,以dbg为快捷键。注意:取消选中:Use code formatter
讲解
Thread.currentThread().getStackTrace()返回值:StackTraceElement[],这是一个数组。
第0项:当前线程信息
第1项:当前方法执行的堆栈
第2项:调用者的堆栈
第1项和第2项的讲解
如果想要把这个调试语句封装为类,则下标就得是2。代码如下
public class DBG {
public static String getFileName() {
return Thread.currentThread().getStackTrace()[2].getFileName();
}
public static String getClassName() {
return Thread.currentThread().getStackTrace()[2].getClassName();
}
public static String getMethodName() {
return Thread.currentThread().getStackTrace()[2].getMethodName();
}
public static int getLineNumber() {
return Thread.currentThread().getStackTrace()[2].getLineNumber();
}
public static void printAll(String args[]) {
System.out.println(getFileName() + " :" +
getClassName() + " :" +
getMethodName() + " :" +
getLineNumber());
}
}