如何取的Java源代碼文件中文件名和行號:)
在C/C++的程序,編譯器提供了兩個宏來支持取得源文件中的行號和文件名,這兩個宏是__FILE__,__LINE__
你可以如下的方法打印行號和文件名
1.#include <stdio.h>
2.int main()
3.{
4. fprintf(stdout,"[%s:%d] Hello World!",__FILE__,__LINE__);
5. return 0;
6.}
但是在JAVA下沒有這兩個宏,那麼我們如何來取得文件名和行號,翻閱JDK,我們找到StackTraceElement這個類。這個類可以從Throwable取得,另外也可以從Thread類取得,通過這些我寫如下的一個打印行號的測試程序:
01.public class LineNo {
02. public static int getLineNumber() {
03. return Thread.currentThread().getStackTrace()[2].getLineNumber();
04. }
05.
06. public static String getFileName() {
07. return Thread.currentThread().getStackTrace()[2].getFileName();
08. }
09. public static void main(String args[]) {
10. System.out.println("["+getFileName()+":"+ getLineNumber()+"]"+"Hello World!");
11. }
12.}
留下一個問題,上面程序中的magic數字 2 代表什麼含義呢?