论坛首页 Java企业应用论坛

方法内 如何得到当前方法名

浏览 10959 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-12-07  
这种需求本身就不合理,如果不是公用的,在每个当前方法都要打。
直接在程序里指定不就可以了。

比如doIt() {
    String methodName = "doIt";
}

如果要公用,那么,比如AOP,获取当前被拦截的方法的名字是多么简单的一件事。

真不知道是爱好学术研究还是咋的,喜欢搞这种事情。
0 请登录后投票
   发表时间:2010-12-07  
thinkaboutit 写道
这种需求本身就不合理,如果不是公用的,在每个当前方法都要打。
直接在程序里指定不就可以了。

比如doIt() {
    String methodName = "doIt";
}

如果要公用,那么,比如AOP,获取当前被拦截的方法的名字是多么简单的一件事。

真不知道是爱好学术研究还是咋的,喜欢搞这种事情。



感觉用处还是有的,比如手动抛出某些业务异常时或做一些重要log时,不想记录整个stack,那个就可以使用楼主的这种方法,进行一些精简的记录。
0 请登录后投票
   发表时间:2010-12-07  
经常遇到来面试的人,用SSH做了几年项目,就号称精通JAVA,。。。
现在 真是需要 沉下心来深入一门语言背后的底层。。。多阅读优秀软件的源码。。
像这个问题,天天用log4j,其实这就是他的基本功能。。。
0 请登录后投票
   发表时间:2010-12-07  
xiaguangme 写道
mtnt2008 写道
qianhd 写道
Thread.currentThread().getStackTrace()
返回一个表示该线程堆栈转储的堆栈跟踪元素数组。

何必再new一个excepetion 重新拷贝staceTrace ?


+1

JDK上API:

public final class StackTraceElementextends Objectimplements Serializable

堆栈跟踪中的元素,它由 Throwable.getStackTrace() 返回。每个元素表示单独的一个堆栈帧。所有的堆栈帧(堆栈顶部的那个堆栈帧除外)都表示一个方法调用。堆栈顶部的帧表示生成堆栈跟踪的执行点。通常,这是创建对应于堆栈跟踪的 throwable 的点。

从以下版本开始:
1.4

所以1.4以上的应该都一样吧





+1 行号也是能这样拿到的,前阵研究通过javassist修改字节码还能拿到方法的参数和返回值。
好多做trace的软件用类似的思路,btrace什么的,知识更复杂了很多


行号不一定能拿到,jdk上写了,和编译器设置有关

0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics