Java 獲取當(dāng)前類名和方法名的實現(xiàn)方法
Java 獲取當(dāng)前類名和方法名的實現(xiàn)方法 這里提供了四種方法并比較,大家需要的可以參考下,
為了測試各個函數(shù),如果手動打印每個類名、函數(shù)名,那么多函數(shù)的話能把人累死,Java早已準(zhǔn)備好了一堆記錄自身的函數(shù)。
獲取類名:
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); //方法4:通過Thread的方法getStackTrace() String clazzName4 = Thread.currentThread().getStackTrace()[2].getClassName(); System.out.println(clazzName4); }
執(zhí)行100w次,
第一種方法:1718ms
第二種方法:4843ms
第三種方法:47ms
第四種方法:6484ms
比較:
1)方法1不知有沒有什么使用限制?
2)方法2通過異常機制獲取調(diào)用棧,性能最差,但能提供其它方法所不具有的功能,還可以獲取方法名,行號等等;但這么使用多少有點不太常規(guī);
3)方法3只是簡單分析了一下匿名類的名稱,顯然要簡單多,事實上性能也是最高的;
4)方法4感覺和方法3有點類似,比方法3正規(guī)了點
獲取函數(shù)名:
public static void testGetFunctionName() { // 方法1:通過Throwable的方法getStackTrace() String funcName2 = new Throwable().getStackTrace()[1].getMethodName(); System.out.println(funcName2); //方法2:通過Thread的方法getStackTrace() String clazzName4 = Thread.currentThread().getStackTrace()[2].getMethodName(); System.out.println(clazzName4); }
執(zhí)行100w次:
第一種:4856ms
第二種:6337ms
說明:
1.Exception類繼承于Throwable,所以有的地方用Exception調(diào)用那個getStackTrace,其實調(diào)用的還是Throwable的
2.不同的jdk版本調(diào)用getStackTrace后得到的數(shù)組不太一樣,下標(biāo)多試幾次就知道了,以上是jdk1.6版本下的
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
Spring mvc整合mybatis(crud+分頁插件)操作mysql
這篇文章主要介紹了Spring mvc整合mybatis(crud+分頁插件)操作mysql的步驟詳解,需要的朋友可以參考下2017-04-04通過Java連接SQL?Server數(shù)據(jù)庫的超詳細(xì)操作流程
java相對于其他語言(例如c,c++等)連接數(shù)據(jù)庫要方便得多,那么如何連接呢?下面這篇文章主要給大家介紹了關(guān)于通過Java連接SQL?Server數(shù)據(jù)庫的超詳細(xì)操作流程,需要的朋友可以參考下2023-03-03java統(tǒng)計文件中每個字符出現(xiàn)的個數(shù)
這篇文章主要為大家詳細(xì)介紹了java統(tǒng)計文件中每個字符出現(xiàn)的個數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-03-03Mybatis 中Mapper使用package方式配置報錯的解決方案
這篇文章主要介紹了Mybatis 中Mapper使用package方式配置報錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07基礎(chǔ)不牢,地動山搖,Java基礎(chǔ)速來刷刷
基礎(chǔ)不牢,地動山搖,快來一起學(xué)習(xí)一下基礎(chǔ)吧,不斷地學(xué)習(xí)就算是基礎(chǔ)也會有新的認(rèn)知和收獲,加油2021-08-08Java畢業(yè)設(shè)計實戰(zhàn)之校園一卡通系統(tǒng)的實現(xiàn)
這是一個使用了java+Springboot+Maven+mybatis+Vue+mysql+wd開發(fā)的校園一卡通系統(tǒng),是一個畢業(yè)設(shè)計的實戰(zhàn)練習(xí),具有校園一卡通系統(tǒng)該有的所有功能,感興趣的朋友快來看看吧2022-01-01elasticsearch索引創(chuàng)建create?index集群matedata更新
這篇文章主要介紹了elasticsearch索引創(chuàng)建create?index及集群matedata更新,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-04-04