이 기사는 주로 StackTraceElement의 관련 내용을 연구하여 메소드 호출 스택 정보를 얻습니다. 자세한 소개 및 예제는 다음과 같습니다.
StackTrace (스택 트랙)는 메소드 통화 스택에 정보를 저장합니다. 예외 처리에 일반적으로 사용되는 PrintStackTrace ()는 본질적으로 예외 호출의 스택 정보를 인쇄하는 것입니다.
StackTraceElement는 StackTrace (Stack Track)의 메소드 객체를 나타내며 해당 속성에는 메소드의 클래스 이름, 메소드 이름, 파일 이름 및 호출 된 줄 수가 포함됩니다.
공개 최종 클래스 StackTraceElement는 java.io.serializable을 구현합니다 {// 일반적으로 VM (1.5로 추가 된 공개 생성자)에 의해 초기화됩니다. 개인 문자열 deleclass; private String methodName; private String filename; private int linenumber;}StackTraceElement는 최종으로 정의되며, 이는 Java 기본 클래스로 상속받을 수 없음을 보여줍니다.
StackTraceElement를 얻는 두 가지 방법이 있으며, 둘 다이 스택의 정보 인 StackTraceElement 배열을 반환합니다.
1. thread.currentthread (). getStacktrace ()
2. New Throwable (). getStacktrace ()
StackTraceElement 배열에는 StackTrace (스택 트랙)의 내용이 포함되어 있습니다. 이를 통과하면 메소드 간의 호출 프로세스를 얻을 수 있습니다. 즉, 현재 메소드와 발신자의 메소드 이름, 호출 라인 수 및 기타 정보를 얻을 수 있습니다.
public class testclass {public static void main (string [] args) {new TestClass (). Methoda ();} private void methoda () {system.out.println ( "---------------------------------------------------------------------------------- methodB(){System.out.println("--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- {stackTraceElement stackTraceElement = elements [i]; String className = stackTraceElement.getClassName (); String MethodName = stackTraceElement.getMethodName (); String Filename = stackTraceElement.getFileName (); int linenbumbes = stacktraceElement.getLlineMernement (); System.OUT.OUT.OUT.OUT 배열 위시 i = "+i+", filename = "+filename+", classname = "+classname+", methodName = "+methodName+", linenbument = "+linenumber);}}}1. 로그 라이브러리를 캡슐화 할 수 있습니다. 대상 로그를 인쇄 할 때이 통화 스택을 통해 로그가 위치한 줄 수를 인쇄 할 수도 있습니다. 이러한 방식으로 로그 출력 라인을 빠르게 찾을 수 있으며 더 이상 전 세계적으로 검색하여 검색 할 수 없습니다.
public static void d (문자열 태그, 문자열 msg, 객체 ... params) {stackTraceElement targetStackTraceElement = getTargetStackTraceElement (); log.d (tag, "(" + targetStackTraceElement.getFilename () + ":" + TargetStackTraceElement.getLinenumber () + "); log.d (tag, string.format (msg, params));}2. SDK를 작성하고 특정 방법이 고정 된 위치에서 호출되기를 희망하면이 방법의 호출 위치가 올바른지 확인하기 위해이 방법이 호출되는시기를 확인할 수도 있습니다.
예를 들어, Activity.Onresume, pvsdk.onresume에서 실행해야하므로 pvsdk.onresume 메소드를 호출 할 때 PVSDK.onResume 메소드를 사용하여 콜 스택의 정보를 얻어 활동 OnResume 메소드 에서이 방법이 호출되는지 여부를 감지합니다.
public class pvsdk {public static void onresume () {stacktraceElement [] stacktrace = stread.currentThread (). getStackTrace (); boolean result = false; for (stackTraceElement StackTraceElement : StackTrace) {String methodName = stackTraceElement.getMethodname (); stackTraceElement.getClassName (); try {boolean antlyableflflass = class.forname (className) .isassignableFrom (activity.class); if (antlyableFromClass && "onresume".Equals (methodName)) {result = true; break;}} catch (classNotfoundecte e)} if (rection) runtimeexception ( "pvsdk.onresume in actives.onresume";}}3. 소스 코드 분석을 수행 할 때 전체 코드의 실행 프로세스를 분석하려면 인쇄 스택에서 정보를 얻을 수 있습니다. 소스 코드를 분석 할 때 매우 유용합니다.
위의 내용은 StackTraceElement 메소드 호출 스택 정보 예제에 대한이 기사의 모든 자세한 설명 입니다. 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구는이 사이트의 다른 관련 주제를 계속 참조 할 수 있습니다. 단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!