C 및 C++에서는 다음과 같이 현재 함수 이름을 인쇄할 수 있습니다.
다음과 같이 코드 코드를 복사합니다.
printf("%s",__func__);
그러나 Java에는 그런 말이 없습니다. 모든 것은 객체이며 객체에서 얻어야 합니다.
첫 번째: Thread 클래스를 통해 얻습니다.
다음과 같이 코드 코드를 복사합니다.
System.out.println(Thread.currentThread().getStackTrace()[1].getMethodName());
System.out.println(Thread.currentThread().getStackTrace()[1].getClassName());
두 번째 메서드는 Throwable 클래스를 통해 얻습니다. 두 번째 메서드는 확장될 수 있으며, Throwable의 모든 하위 클래스에서 해당 기능을 구현할 수 있습니다.
다음과 같이 코드 코드를 복사합니다.
System.out.println(new Throwable().getStackTrace()[0].getMethodName());
System.out.println(new Throwable().getStackTrace()[0].getClassName());
이 두 가지 메소드를 통해 현재 메소드 이름과 클래스 이름을 출력할 수 있지만, 단점이 있습니다: 인덱스가 다음과 같습니다:
다음과 같이 코드 코드를 복사합니다.
getStackTrace()[색인]
0, 1 또는 다른 값 중에서 어떤 값을 취해야 합니까? 여기서 두 메서드의 인덱스는 각각 0과 1로 기록되어 있는데, 이는 고정된 것이 아니며 테스트를 통해 직접 결정해야 한다는 점을 상기시키기 위한 것입니다. JDK 버전에 따라 값이 다를 수 있다고 합니다. 그러나 직접 테스트하지는 않았습니다.
테스트에 사용한 JDK 버전: java 버전 "1.7.0_17"