国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

找出正被調用的方法名

2019-11-17 06:06:38
字體:
來源:轉載
供稿:網友

使用 J2SE 1.4 以前版本的開發人員往往需要檢測程序運行到了什么位置,也就是當前運行的方法。例如,在記錄程序運行過程的時候就有這樣的需求。直到現在,開發人員們仍然問著同樣的問題。不過,在 J2SE 1.4 中,這個問題的答案簡單了許多。

找到當前運行位置的較原始的方法是產生一個異常,將追蹤堆棧輸出到內存中的一個緩沖區,然后從這些追蹤信息中找出你需要的信息。刪除無用的信息之后,剩下的就是你要尋找的方法名。如下例代碼:

import java.io.*;

public class ManualDump {

public static void main(String args[])

throws IOException {

Throwable t = new Throwable();

StringWriter sw = new StringWriter();

PRintWriter pw = new PrintWriter(sw);

t.printStackTrace(pw);

String input = sw.getBuffer().toString();

StringReader sr = new StringReader(input);

BufferedReader br = new BufferedReader(sr);

br.readLine(); // Exception name

String line = br.readLine();

int paren = line.indexOf('(');

line = line.substring(0, paren);

int period = line.lastIndexOf('.');

line = line.substring(period+1);

System.out.println("Method: " + line);

}

}

運行 ManualDump 將顯示:Method: main

這個原始的方法在 J2SE 1.4 中仍然可用,但有一個更簡潔的方法為分析堆棧中的信息。J2SE 1.4 中有一個新的特征,就是連鎖異常功能 (Chained Exception Facility)。這個功能答應你說明異常 X 是導致異常 Y 的原因,也可以使你有能力超躍打印追蹤棧這一作法——你可以獲得追蹤棧并自己“打印”它。你只需要簡單的調用 Throwable 類的一個新方法 etStackTrace 即可獲得一個 StackTraceElement 對象數組。這個類中定義了一個名為 getMethodName 的方法。位于數組索引號為 0 位置的 StackTraceElemnt 對象就是當前的方法:

public class AutoDump {

public static void main(String args[]) {

Throwable t = new Throwable();

StackTraceElement elements[] = t.getStackTrace();

String method = elements[0].getMethodName();

System.out.println("Method: " + method);

}

}

運行 AutoDump 將顯示:Method: main

通過 getStackTrace 方法,你完全可以改變 printStackTrace 的結果,或者創建你自己的輸出格式。因為你可以很輕易地獲得方法名了。

也許你認為有了 StackTraceElement 你就可以根據需要做任何事情了,從技術上來說,的確如此。然而,我必須提及另一件事。假如你是為了記錄運行過程而獲取方法名,不要忘了還有 Java Logging API。你可以在 java.util.logging 包里找到相關的類。它們答應你一直記錄,包括記錄當前的方法。更重要的是,Java Logging API 答應你做這些記錄而不需要手工去找出方法名。這些 API 已經在其它技巧類文章中提及,這里不不多說了。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 涟源市| 都安| 榆中县| 锡林郭勒盟| 石家庄市| 绥滨县| 大同市| 慈利县| 奉新县| 黄大仙区| 嫩江县| 湖北省| 徐闻县| 通渭县| 永胜县| 海南省| 芦溪县| 平度市| 博客| 剑阁县| 枣强县| 平武县| 长沙县| 台东县| 岳阳市| 民和| 沭阳县| 尼勒克县| 连城县| 新宁县| 佛冈县| 栖霞市| 鄢陵县| 全椒县| 长子县| 龙州县| 日喀则市| 邵武市| 合江县| 班戈县| 德化县|