方法返回地址


  • 方法返回地址存放調用該方法的PC寄存器的值。一個方法的結束,有兩種方式:正常地執行完成,出現未處理的異常非正常的退出。無論通過哪種方式退出,在方法退出后都返回到該方法被調用的位置。方法正常退出時,調用者的PC計數器的值作為返回地址,即調用該方法的指令的下一條指令的地址。而通過異常退出的,返回地址是要通過異常表來確定,棧幀中一般不會保存這部分信息。
  • 本質上,方法的退出就是當前棧幀出棧的過程。此時,需要恢復上層方法的局部變量表、操作數棧、將返回值壓入調用者棧幀的操作數棧、設置PC寄存器值等,讓調用者方法繼續執行下去。
  • 正常完成出口和異常完成出口的區別在於:通過異常完成的出口退出的不會給它的上層調用者產生任何的返回值。當一個方法開始執行后,只有兩種方式可以退出這個方法:

(1)執行引擎遇到任意一個方法返回的字節碼指令(return),會有返回值傳遞給上層的方法調用者,簡稱正常的完成出口。一個方法在正常調用完成之后究竟需要使用哪一個返回指令還需要根據方法返回值的實際數據類型而定。在字節碼指令中,返回指令包含ireturn(當返回值是Boolean、byte、char、short和int類型時使用)、lreturn、freturn、dreturn以及areturn,另外還有一個return指令供聲明為void的方法、實例初始化方法、類和接口的初始化方法使用。

(2)在方法執行的過程中遇到了異常(Exception),並且這個異常沒有在方法內進行處理,也就是只要在本方法的異常表中沒有搜索到匹配的異常處理器,就會導致方法退出,稱為異常完成出口。方法執行過程中拋出異常時的異常處理,存儲在一個異常處理表,方便在發生異常的時候找到處理異常的代碼。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM