Java--反射(框架設計的靈魂)


Java--反射(框架設計的靈魂)

博客說明

文章所涉及的資料來自互聯網整理和個人總結,意在於個人學習和經驗匯總,如有什么地方侵權,請聯系本人刪除,謝謝!

說明

  1. 框架:半成品軟件。可以在框架的基礎上進行軟件開發,簡化編碼
  2. 反射:將類的各個組成部分封裝為其他對象,這就是反射機制

反射機制的好處

  1. 可以在程序運行過程中,操作這些對象
  2. 可以解耦,提高程序的可擴展性

獲取Class對象的方式

  1. Class.forName("全類名"):將字節碼文件加載進內存,返回Class對象
    • 多用於配置文件,將類名定義在配置文件中。讀取文件,加載類
  2. 類名.class:通過類名的屬性class獲取
    • 多用於參數的傳遞
  3. 對象.getClass():getClass()方法在Object類中定義着。
    • 多用於對象的獲取字節碼的方式
  • 結論:
    同一個字節碼文件(*.class)在一次程序運行過程中,只會被加載一次,不論通過哪一種方式獲取的Class對象都是同一個。

Class對象功能

獲取成員變量
  • Field[] getFields() :獲取所有public修飾的成員變量

    • Field getField(String name) 獲取指定名稱的 public修飾的成員變量
  • Field[] getDeclaredFields() 獲取所有的成員變量,不考慮修飾符

    • Field getDeclaredField(String name)
Field:成員變量
  1. 設置值

    • void set(Object obj, Object value)
  2. 獲取值

    • get(Object obj)
  3. 忽略訪問權限修飾符的安全檢查

    • setAccessible(true):暴力反射
獲取構造方法
  • Constructor<?>[] getConstructors()

    • Constructor getConstructor(類<?>... parameterTypes)
  • Constructor getDeclaredConstructor(類<?>... parameterTypes)

    • Constructor<?>[] getDeclaredConstructors()
Constructor:構造方法
  • 創建對象:
    • T newInstance(Object... initargs)
    • 如果使用空參數構造方法創建對象,操作可以簡化:Class對象的newInstance方法
獲取成員方法們
  • Method[] getMethods()

    • Method getMethod(String name, 類<?>... parameterTypes)
  • Method[] getDeclaredMethods()

    • Method getDeclaredMethod(String name, 類<?>... parameterTypes)
Method:方法對象
  • 執行方法:

    • Object invoke(Object obj, Object... args)
  • 獲取方法名稱:

    • String getName:獲取方法名
獲取全類名
  • String getName()

感謝

黑馬程序員

以及勤勞的自己

關注公眾號: 歸子莫,獲取更多的資料,還有更長的學習計划


免責聲明!

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



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