- 1、本文档共2页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Java中获取当前函数名类名当前类的文件名getClass()
获取当前类名:String clazz = this.getClass().getName();JDK 5):Thread.currentThread()
在JDK 5中,有三个类拥有getStackTrace方法,分别是ThreadInfo, Thread和Throwable。此处,我们用Thread.currentThread()中的StackTraceElement来获取当前函数名。具体代码如下:
获取当前函数名:Thread.currentThread().getStackTrace()[2].getMethodName();
获取当前类名:Thread.currentThread().getStackTrace()[2].getClassName();
例:mon.SearchAction获取当前类的文件名:Thread.currentThread().getStackTrace()[2].getFileName();??例:SearchAction.java静态方法静态方法不与特定实例关联,不能引用this,要得到当前类名,没有直接的办法。通过查资料和试验,可以用下面几种方式:public static void testGetClassName() {
//方法1:通过SecurityManager的保护方法getClassContext()
String clazzName = new SecurityManager() {
public String getClassName() {
return getClassContext()[1].getName(); //获取的是包名.类名。
}
}.getClassName();
System.out.println(clazzName);
//方法2:通过Throwable的方法getStackTrace()
String clazzName2 = new Throwable().getStackTrace()[1].getClassName();
System.out.println(clazzName2);
//方法3:通过分析匿名类名称()
String clazzName3 = new Object() {
public String getClassName() {
String clazzName = this.getClass().getName();//获取的是包名.类名。
return clazzName.substring(0, clazzName.lastIndexOf($));
}
}.getClassName();
System.out.println(clazzName3);
}
分别调用10万次,
??? 方法1:219ms
??? 方法2:953ms
??? 方法3:31ms
比较:
??? 1)方法1不知有没有什么使用限制?
??? 2)方法2通过异常机制获取调用栈,性能最差,但能提供其它方法所不具有的功能,还可以获取方法名,行号等等;但这么使用多少有点不太常规;
??? 3)方法3只是简单分析了一下匿名类的名称,显然要简单多,事实上性能也是最高的;
文档评论(0)