欢迎来到天天文库
浏览记录
ID:62033708
大小:17.50 KB
页数:2页
时间:2021-04-15
《Java中获取当前函数名、类名、当前类的文件名.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Java中获取当前函数名、类名、当前类的文件名方法一:getClass()获取当前类名:Stringclazz=this。getClass()。getName();方法二(JDK5):Thread。currentThread()在JDK5中,有三个类拥有getStackTrace方法,分别是ThreadInfo, Thread和Throwable。此处,我们用Thread。currentThread()中的StackTraceElement来获取当前函数名.具体代码如下:1.获取当前函数名:Thread.currentThre
2、ad()。getStackTrace()[2]。getMethodName();2.获取当前类名:Thread。currentThread().getStackTrace()[2]。getClassName();例:ip.or.sk。common.SearchAction3.获取当前类的文件名:Thread.currentThread()。getStackTrace()[2].getFileName(); 例:SearchAction.java方法三:可在静态方法使用静态方法不与特定实例关联,不能引用this,要得到当前类名
3、,没有直接的办法。通过查资料和试验,可以用下面几种方式:publicstaticvoid testGetClassName() {ﻩ//方法1:通过SecurityManager的保护方法getClassContext()ﻩStringclazzName=newSecurityManager(){ﻩpublicStringgetClassName(){ﻩﻩreturngetClassContext()[1].getName(); //获取的是包名.类名。ﻩﻩ}ﻩ}。getClassName();ﻩSystem。out。prin
4、tln(clazzName);ﻩ//方法2:通过Throwable的方法getStackTrace()String clazzName2=newThrowable().getStackTrace()[1].getClassName();ﻩﻩSystem.out.println(clazzName2);ﻩﻩ//方法3:通过分析匿名类名称()String clazzName3 = new Object() {ﻩﻩpublic String getClassName(){ﻩStringclazzName =this.getClass
5、()。getName();//获取的是包名.类名.ﻩreturnclazzName。substring(0,clazzName。lastIndexOf(’$'));}ﻩﻩ}。getClassName();System.out。println(clazzName3);ﻩ}分别调用10万次, 方法1:219ms 方法2:953ms 方法3:31ms比较: 1)方法1不知有没有什么使用限制? 2)方法2通过异常机制获取调用栈,性能最差,但能提供其它方法所不具有的功能,还可以获取方法名,行号等等;但这么使用多少有
6、点不太常规; 3)方法3只是简单分析了一下匿名类的名称,显然要简单多,事实上性能也是最高的;
此文档下载收益归作者所有