>  기사  >  Java  >  Java에서 현재 클래스 이름과 메소드 이름 인스턴스를 얻는 방법

Java에서 현재 클래스 이름과 메소드 이름 인스턴스를 얻는 방법

黄舟
黄舟원래의
2017-07-22 15:45:363014검색

이 글에서는 Java에서 현재 클래스 이름과 메소드 이름을 가져오는 구현 방법에 대한 관련 정보를 주로 소개합니다. 구현 방법을 제공하고 여러 메소드의 효율성을 비교할 뿐만 아니라 필요한 친구들이 참고할 수 있습니다.

Get Java의 현재 클래스 이름 및 메소드 이름 了 여기서는 4가지 메소드 및 비교를 제공합니다. 필요한 경우 각 기능을 테스트하기 위해 각 항목 이름 및 기능을 수동으로 인쇄하면 참조할 수 있습니다. 이름을 지정하면 많은 기능이 너무 피곤할 수 있습니다. Java는 이미 자체적으로 기록할 수 있는 많은 기능을 준비했습니다.

클래스 이름 가져오기:


public static void testGetClassName() { 
  // 方法1:通过SecurityManager的保护方法getClassContext() 
  String clazzName = new SecurityManager() { 
    public String getClassName() { 
      return getClassContext()[1].getName(); 
    } 
  }.getClassName(); 
  System.out.println(clazzName); 
  // 方法2:通过Throwable的方法getStackTrace() 
  String clazzName2 = new Throwable().getStackTrace()[1].getClassName(); 
  System.out.println(clazzName2); 
  // 方法3:通过分析匿名类名称() 
  String clazzName3 = new Object() { 
    public String getClassName() { 
      String clazzName = this.getClass().getName(); 
      return clazzName.substring(0, clazzName.lastIndexOf('$')); 
    } 
  }.getClassName(); 
  System.out.println(clazzName3); 
  //方法4:通过Thread的方法getStackTrace() 
  String clazzName4 = Thread.currentThread().getStackTrace()[2].getClassName(); 
  System.out.println(clazzName4); 
}
100만 번 실행됨,

첫 번째 방법: 1718ms

두 번째 방법: 4843ms
세 번째 방법: 47ms

네 번째 방법: 6484 ms


비교:



1) 방법 1에 사용 제한이 있나요?

2) 메소드 2는 예외 메커니즘을 통해 호출 스택을 얻습니다. 이는 성능이 가장 좋지 않지만 다른 메소드에 없는 기능을 제공할 수 있고 메소드 이름, 줄 번호 등도 얻을 수 있지만 이 용도는 다소 다릅니다.

3) 방법 3은 익명 클래스의 이름을 간략하게 분석한 것임이 분명하며 실제로는 가장 높은 성능을 발휘합니다. 4) 방법 4는 방법 3과 약간 비슷하고 좀 더 형식적입니다. 방법 3보다

함수 이름 가져오기:





public static void testGetFunctionName() { 
    // 方法1:通过Throwable的方法getStackTrace() 
    String funcName2 = new Throwable().getStackTrace()[1].getMethodName(); 
    System.out.println(funcName2); 
    //方法2:通过Thread的方法getStackTrace() 
    String clazzName4 = Thread.currentThread().getStackTrace()[2].getMethodName(); 
    System.out.println(clazzName4);  
  }

100만 번 실행:


첫 번째 유형: 4856ms

두 번째 유형: 6337ms


설명:



1. 예외 클래스 Throwable에서 상속되므로 어떤 곳에서는 Exception을 사용하여 getStackTrace를 호출하지만 실제로는 Throwable

2를 호출합니다. 다른 jdk 버전은 getStackTrace를 호출한 후 다른 배열을 얻습니다. 위의 내용은 jdk1 아래에 있습니다. 6버전

위 내용은 Java에서 현재 클래스 이름과 메소드 이름 인스턴스를 얻는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.