測試方法入口java
package com.demo.test.stackTraceTest; public class Test { public static void main(String[] args) { try { System.out.println("into main"); Say s = new Provider1(); s.say(); } catch (Exception e) { } } }
第一次調用方法ide
package com.demo.test.stackTraceTest; public class Provider1 implements Say{ @Override public void say() throws Exception { System.out.println("into provider 1"); Provider2 p =new Provider2(); p.say(); } }
第二次調用方法並打印 調用棧測試
package com.demo.test.stackTraceTest; public class Provider2 { public void say() { System.out.println("into provider 2"); StackTraceElement [] ele = Thread.currentThread().getStackTrace(); for (StackTraceElement stackTraceElement : ele) { System.out.println(stackTraceElement); } } }
打印出的調用棧線程
在方法中使用StackTrace時,Thread.currentThread().getStackTrace()[0]爲當前線程。索引下標1爲當前調用的方法。code