简介
本文介绍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()); } }
请先
!