當前位置:編程學習大全網 - 編程軟體 - java 中 invoke()的作用是什麽?

java 中 invoke()的作用是什麽?

在寫代碼的時候,發現從父類class通過getDeclaredMethod獲取的Method可以調用子類的對象,而子類改寫了這個方法,從子類class通過getDeclaredMethod也能獲取到Method,這時去調用父類的對象也會報錯。雖然這是很符合多態的現象,也符合java的動態綁定規範,但還是想弄懂java是如何實現的,就學習了下Method的源代碼。?

Method的invoke方法:

1、先檢查?AccessibleObject的override屬性是否為true。

AccessibleObject是Method,Field,Constructor的父類,override屬性默認為false,可調用setAccessible方法改變,如果設置為true,則表示可以忽略訪問權限的限制,直接調用。

2、如果不是ture,則要進行訪問權限檢測。用Reflection的quickCheckMemberAccess方法先檢查是不是public的,如果不是再用Reflection.getCallerClass方法獲得到調用這個方法的Class,然後做是否有權限訪問的校驗,校驗之後緩存壹次,以便下次如果還是這個類來調用就不用去做校驗了,直接用上次的結果。

3、調用MethodAccessor的invoke方法。每個Method對象包含壹個root對象,root對象裏持有壹個MethodAccessor對象。我們獲得的Method獨享相當於壹個root對象的鏡像,所有這類Method***享root裏的MethodAccessor對象,(這個對象由ReflectionFactory方法生成,ReflectionFactory對象在Method類中是static?final的由native方法實例化。

  • 上一篇:汽車自動駕駛輔助系統使用什麽語言開發
  • 下一篇:華府的葛青老師好嗎?
  • copyright 2024編程學習大全網