“嗨!今天我會告訴你什麼是堆棧跟踪。但首先我需要告訴你什麼是堆棧。”
“想像一堆文件——給某個員工的指令。你可以把一個新任務放在這堆文件的最上面,或者你可以從最上面拿一個任務。這意味著任務不會按照收到的順序執行.最近放在堆上的任務將最先執行。以這種方式構建集合的元素形成堆棧。 ”
“ Java 對此有一個特殊的集合 – Stack。它是一個具有‘添加元素’和‘獲取(獲取)元素’的方法的集合。您可能已經猜到了,最後添加的元素將是第一個添加的元素。被帶走。”
“聽起來很簡單。”
“太好了。現在我將解釋堆棧跟踪是什麼。”
“想像一下,在一個 Java 程序中,方法 A調用方法 B,方法 B又調用方法C ,方法 C 又調用方法 D。要退出方法 B ,我們必須先退出方法 C,為此,我們必須先退出方法 D。這行為類似於堆棧。”
“為什麼說很像呢?”
“例如,要完成我們一堆文件中間的某個任務,您首先需要執行位於它上面的所有任務。”
“有一些相似之處,但我不確定我是否正確理解了所有內容。”
“看。堆棧是一組元素。就像一堆紙。要從頂部拿第三張紙,您首先需要拿第二張紙,為此,您需要拿第一張紙。你總是可以放和拿紙片,但你總是要先拿最上面的紙。”
“函數調用也是如此。方法 A調用方法 B,方法 B 調用方法 C 。要退出A,您必須先退出B,為此,您需要退出C。”
“等等。如果我明白你在說什麼,堆棧的整個概念歸結為‘拿走最後添加的那張紙’和‘你只能退出你最近進入的方法’。這樣說準確嗎? “
“是的。函數調用的順序被稱為‘調用堆棧’或簡稱為‘堆棧’。最後調用的函數是第一個結束的函數。讓我們深入研究一個例子。”
獲取並顯示當前調用堆棧: |
---|
|
結果: |
|
“好的。我了解有關函數調用的所有信息。但是這個 StackTraceElement 是什麼?”
“Java 機器跟踪所有函數調用。為此,它有一個特殊的集合——堆棧。當一個函數調用另一個函數時,Java 機器將一個新的 StackTraceElement 對象放到堆棧上。當一個函數完成時,該元素將被刪除來自堆棧。這意味著堆棧始終存儲有關“函數調用堆棧”當前狀態的最新信息。 ”
“每個StackTraceElement對像都包含有關被調用方法的信息。特別是,您可以使用getMethodName方法獲取方法名稱。”
“你可以在上面的例子中看到它是如何工作的:
1)我們得到調用堆棧。
2) 我們使用for-each循環來遍歷它。我希望你沒有忘記那是什麼。
3) 我們將方法名稱輸出到System.out。”
“令人著迷!而且也不太複雜。謝謝你,Rishi!”
GO TO FULL VERSION