在Java中,要获取静态方法所属的类名,有几种常见的方法:
getClass()
方法(不适用于静态方法)对于实例方法,可以使用this.getClass()
,但静态方法没有this
引用,因此不能直接使用这种方法。
Class.forName()
方法public class MyClass {
public static void myStaticMethod() {
String className = MyClass.class.getName();
System.out.println("静态方法所属类名: " + className);
}
}
StackTraceElement
获取调用栈信息public class MyClass {
public static void myStaticMethod() {
String className = new Throwable().getStackTrace()[0].getClassName();
System.out.println("静态方法所属类名: " + className);
}
}
最简单直接的方法:
public class MyClass {
public static void myStaticMethod() {
System.out.println("静态方法所属类名: " + MyClass.class.getName());
}
}
public class MyClass {
public static void myStaticMethod() {
String className = new Object(){}.getClass().getEnclosingClass().getName();
System.out.println("静态方法所属类名: " + className);
}
}
getStackTrace
)性能开销较大,不推荐在频繁调用的代码中使用MyClass.class.getName()
)public class StaticMethodDemo {
public static void printClassName() {
// 方法1: 直接使用类字面量
System.out.println("方法1: " + StaticMethodDemo.class.getName());
// 方法2: 使用StackTraceElement
System.out.println("方法2: " + new Throwable().getStackTrace()[0].getClassName());
// 方法3: 使用匿名内部类反射
System.out.println("方法3: " + new Object(){}.getClass().getEnclosingClass().getName());
}
public static void main(String[] args) {
StaticMethodDemo.printClassName();
}
}
输出结果:
方法1: StaticMethodDemo
方法2: StaticMethodDemo
方法3: StaticMethodDemo
没有搜到相关的文章