Java获取调用当前方法的类名或方法名(栈堆信息)的4种方式
在Java中,可以通过Throwable
类的getStackTrace()
方法获取当前线程的堆栈信息,然后通过分析栈信息来获取调用当前方法的类名和方法名。以下是获取调用当前方法的类名和方法名的四种方式:
- 使用
Thread.currentThread().getStackTrace()
- 使用
new Exception().getStackTrace()
- 使用
new Throwable().getStackTrace()
- 使用
Thread.currentThread().getStackTrace()
循环比对
下面是具体的实现代码:
public class StackTraceExample {
public static void printMethodNames() {
// 方式1: 使用Thread.currentThread().getStackTrace()
for (StackTraceElement element : Thread.currentThread().getStackTrace()) {
if ("printMethodNames".equals(element.getMethodName())) {
String className = element.getClassName();
String methodName = element.getMethodName();
int lineNumber = element.getLineNumber();
System.out.println("Class name: " + className + ", Method name: " + methodName + ", Line number: " + lineNumber);
break;
}
}
// 方式2: 使用new Exception().getStackTrace()
try {
throw new Exception();
} catch (Exception e) {
for (StackTraceElement element : e.getStackTrace()) {
if ("printMethodNames".equals(element.getMethodName())) {
String className = element.getClassName();
String methodName = element.getMethodName();
int lineNumber = element.getLineNumber();
System.out.println("Class name: " + className + ", Method name: " + methodName + ", Line number: " + lineNumber);
break;
}
}
}
// 方式3: 使用new Throwable().getStackTrace()
for (StackTraceElement element : new Throwable().getStackTrace()) {
if ("printMethodNames".equals(element.getMethodName())) {
String className = element.getClassName();
String methodName = element.getMethodName();
int lineNumber = element.getLineNumber();
System.out.println("Class name: " + className + ", Method name: " + methodName + ", Line number: " + lineNumber);
break;
}
}
// 方式4: 使用循环比对
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
评论已关闭