美文网首页java
Java 静态方法获取当前类

Java 静态方法获取当前类

作者: 一杉风雨 | 来源:发表于2019-05-02 19:20 被阅读0次

Java中静态方法不依赖于具体的实例存在,所有不能直接使用this指针,需要别的方式间接的获取到类名。

方法

  1. 方法1:通过SecurityManager的保护方法getClassContext()
private static String test1() {
        return new SecurityManager() {
            public String getClassName() {
                return getClassContext()[1].getName();
            }
        }.getClassName();
    }
  1. 方法2:通过Throwable的方法getStackTrace()
private static String test2() {
        return new Throwable().getStackTrace()[1].getClassName();
    }
  1. 方法3:通过Thread.currentThread的方法getStackTrace()
private static String test3() {
        return Thread.currentThread().getStackTrace()[1].getClassName();
    }
  1. 方法4:通过分析匿名类名称()
private static String test4() {
        return new Object() {
            public String getClassName() {
                String clazzName = this.getClass().getName();
                return clazzName.substring(0, clazzName.lastIndexOf('$'));
            }
        }.getClassName();
    }

性能

分别调用100w次测试性能

public static void main(String[] args) {
        long start, end;
        int total = 1000000;
        String className = null;

        start = System.currentTimeMillis();
        for (int i = 0; i < total; i++) {
            className = Main.test1();
        }
        end = System.currentTimeMillis();
        System.out.println("test1: " + className + "time: " + (end - start) + " ms");

        start = System.currentTimeMillis();
        for (int i = 0; i < total; i++) {
            Main.test2();
        }
        end = System.currentTimeMillis();
        System.out.println("test2: " + className + "time: " + (end - start) + " ms");

        start = System.currentTimeMillis();
        for (int i = 0; i < total; i++) {
            Main.test3();
        }
        end = System.currentTimeMillis();
        System.out.println("test3: " + className + "time: " + (end - start) + " ms");

        start = System.currentTimeMillis();
        for (int i = 0; i < total; i++) {
            Main.test4();
        }
        end = System.currentTimeMillis();
        System.out.println("test4: " + className + "time: " + (end - start) + " ms");
    }

测试结果: 直接分析匿名内部类名字性能最高

test1: com.rainlf.mult.Maintime: 463 ms
test2: com.rainlf.mult.Maintime: 1840 ms
test3: com.rainlf.mult.Maintime: 2193 ms
test4: com.rainlf.mult.Maintime: 21 ms

相关文章

  • Java 静态方法获取当前类

    Java中静态方法不依赖于具体的实例存在,所有不能直接使用this指针,需要别的方式间接的获取到类名。 方法 方法...

  • 常用函数

    获取当前类名非静态方法:this.getClass().getName()静态方法:Thread.currentT...

  • get_class和get_called_class的区别

    get_class ():获取当前调用方法的类名 get_called_class():获取静态绑定后的类名 有例...

  • Effective Java刷书笔记---静态工厂方法

    Effective Java刷书笔记---静态工厂方法 类实例获取--“考虑”用静态工厂方法代替构造器对于一个类而...

  • 20171004

    1.get_class (): 获取当前调用方法的类名; 2.get_called_class():获取静态绑定后...

  • 获取Java类中的所有方法

    1.获取当前类定义的所有方法,不包括父类和接口的 会返回当前类定义的所有方法(包括私有的、静态的、抽象的),但不会...

  • 反射

    一、 注解的定义反射是通过class文件对象获取java类的构造方法、成员方法、属性、静态代码块等。二、使用 获取...

  • swift中的Self

    方法内部使用Self 可以用于获取当前类的静态变量(不管是在实例方法里还是静态方法里) 协议中使用Self 1.可...

  • unity3d c#调用java

    c#调用java非静态方法 C#调用静态类,静态方法 ; CustomClass的静态类,SetData是它的静...

  • PHP获取当前类名、函数名、方法名

    PHP获取当前类名、方法名__CLASS__ 获取当前类名__FUNCTION__ 当前函数名(co...

网友评论

    本文标题:Java 静态方法获取当前类

    本文链接:https://www.haomeiwen.com/subject/wjxonqtx.html