今天,看朋友編寫程序,打印日志時,需要記錄當前類的類名以及當前方法的方法名,我發現 TA 將類名或者方法名直接寫死在了代碼中。。。雖說這樣可以實現記錄類名和方法名,但是當有特殊情況需要修改類名或者方法名時,源碼中涉及類名或者方法名的地方必須同步變更,若修改的地方比較多,難免可能發生有遺漏的地方,那么后續通過日志查看分析原因時,就會找不到相應的地方,導致無法分析,查找原因。
為何要獲取類名?
- 調試源碼
- 記錄日志
- 生成報告
- 統計分析,對調用比例占比大的方法,增強單元測試
- 構建系統調用關系鏈,對主要關系鏈或多分支方法重點測試,加強業務、功能、安全、性能等方面的測試
上述各作用,會逐步進行相應的簡述,敬請期待!感興趣的小主可先自行研究。
那么我們該如何獲取對應的類名和方法名呢?其實,在 JDK 中早就提供了相關的方法或者途徑獲取相應的類名或方法名。不知道大家之前在調試 Java 源碼的時候,在異常報錯的時候,有沒有查看過相應的報錯信息,若是注意到此,那么相信你肯定也知道如何通過異常錯誤獲取當前的類名和方法名了。
獲取類名或者方法名的方法比較簡單,在此不作詳細的說明,直接上碼了,敬請各位小主參閱。若有不足之處,敬請大神指正,不勝感激!
/**
* Aaron.ffp Inc.
* Copyright (c) 2004-2015 All Rights Reserved.
*/
package com.java.demo;
import org.testng.annotations.Test;
/**
* Get information of class and method
*
* @author Aaron.ffp
* @version V1.0.0: Jsoup com.java.demo GetClassMethodName.java, 2015-8-13 10:58:39 Exp $
*/
public class GetClassMethodName extends InvokeClass{
/**
* Get information of class
*
* @author Aaron.ffp
* @version V1.0.0: Jsoup com.java.demo GetClassMethodName.java test_getClassName, 2015-8-14 12:09:07 Exp $
*
*/
@Test
public void test_getClassName(){
System.out.println("this.getClass()\t\t\t\t" + this.getClass());
System.out.println("this.getClass().getName()\t\t" + this.getClass().getName());
System.out.println("this.getClass().getSimpleName()\t\t" + this.getClass().getSimpleName() + "\n");
}
/**
* Get information of method
*
* @author Aaron.ffp
* @version V1.0.0: Jsoup com.java.demo GetClassMethodName.java test_getMethodName, 2015-8-14 12:10:02 Exp $
*
*/
@Test
public void test_getMethodName(){
// get info by exception
StackTraceElement[] ste = new Exception().getStackTrace();
for (int i = 0; i < ste.length; i++) {
if (i > 0) {
break;
}
System.out.println("ste[" + i + "].getFileName()" + "\t\t" + ste[i].getFileName() + "\n" +
"ste[" + i + "].getClassName()" + "\t\t" + ste[i].getClassName() + "\n" +
"ste[" + i + "].getLineNumber()" + "\t\t" + ste[i].getLineNumber() + "\n" +
"ste[" + i + "].getMethodName()" + "\t\t" + ste[i].getMethodName() + "\n");
}
// get info by Thread
ste = Thread.currentThread().getStackTrace();
for (int i = 0; i < ste.length; i++) {
if (i != 1) {
continue;
}
System.out.println("ste[" + i + "].getFileName()" + "\t\t" + ste[i].getFileName() + "\n" +
"ste[" + i + "].getClassName()" + "\t\t" + ste[i].getClassName() + "\n" +
"ste[" + i + "].getLineNumber()" + "\t\t" + ste[i].getLineNumber() + "\n" +
"ste[" + i + "].getMethodName()" + "\t\t" + ste[i].getMethodName() + "\n");
}
}
}
程序執行結果如下所示:
至此, Java學習-024-獲取當前類名或方法名二三文 順利完結,希望此文能夠給初學 Java 的您一份參考。
最后,非常感謝親的駐足,希望此文能對親有所幫助。熱烈歡迎親一起探討,共同進步。非常感謝! ^_^
