测试方法入口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