注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

程序员小站

J2EE丨Spring | JVM | Scala

 
 
 

日志

 
 

Java 获得方法调用者信息  

2012-01-14 22:40:11|  分类: java技巧 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
先看如下类:

/**
 * 测试得到调用者的类名,方法名,行数,文件名等信息
 * @author feng
 *
 */
public class TestClass {
public static void main(String[] args){   
       test();   
}   
    public static void test(){   
        getCaller();
    }   
    public static void getCaller()   
    {   
        StackTraceElement stack[] = (new Throwable()).getStackTrace();   
        for (int i = 0; i < stack.length; i++)   
        {   
            StackTraceElement s = stack[i];   
            System.out.format(" ClassName:%d\t%s\n", i, s.getClassName());   
            System.out.format("MethodName:%d\t%s\n", i, s.getMethodName());   
            System.out.format("  FileName:%d\t%s\n", i, s.getFileName());   
            System.out.format("LineNumber:%d\t%s\n\n", i, s.getLineNumber());   
        }   
    }   
}

执行结果:

 ClassName:0 com.spring.exception.TestClass
MethodName:0 getCaller
  FileName:0 TestClass.java
LineNumber:0 20

 ClassName:1 com.spring.exception.TestClass
MethodName:1 test
  FileName:1 TestClass.java
LineNumber:1 15

 ClassName:2 com.spring.exception.TestClass
MethodName:2 main
  FileName:2 TestClass.java
LineNumber:2 10

堆栈跟踪中的元素,它由 Throwable.getStackTrace()
返回。每个元素表示单独的一个堆栈帧。所有的堆栈帧(堆栈顶部的那个堆栈帧除外)都表示一个方法调用。堆栈顶部的帧表示生成堆栈跟踪的执行点。通常,这是创建对应于堆栈跟踪的
throwable 的点。
分析执行结果不能看出:stack[0]是最后该方法自己调用的自己,stack[1]就是该方法直接调用者,stack[2]就是该方法调用者的调用者,依次类推。
我们要得到目标方法的直接调用者,直接用stack[1]内的方法就行。 

      stack[1].getClassName();
stack[1].getMethodName();
stack[1].getFileName();
stack[1].getLineNumber();

  评论这张
 
阅读(818)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017