淺談Java —— Reflection機制(一)

概述

反射(Reflection)是Java 程序開發語言的特徵之一,它容許運行中的 Java 程序獲取自身的信息,而且能夠操做類或對象的內部屬性。bash

這就意味着,Java語言在運行時,擁有自觀能力,經過這種能力能夠了解自身,以便爲下一步操做作準備。markdown

反射的核心是JVM在運行時才動態加載類或調用方法/訪問屬性,它不須要事先(寫代碼的時候或編譯期)知道運行對象是誰。函數

接下來從幾個方面來探討一下Java的反射機制oop

  • 反射的用途spa

  • 反射的基本運用.net

反射的用途

Spring的核心部分,IOC的實現就是經過反射機制實現的。code

在實例化一個類的時候,Spring會經過反射機制調用類的set方法將事先保存在HashMap中的類屬性注入到類中。(借鑑自t_man的專欄orm

由於初次接觸,這裏就再也不例舉反射機制的其餘用途,留待後續補充……對象

反射的基本運用

Java的反射機制藉助於4個類:class,Constructor,Field,Methodblog

在Java運行環境中,對於任何一個類,能夠獲取到這個類的屬性和方法。這樣動態獲取類信息以及動態調用對象的方法的功能源於Java Refleciton

Java反射機制主要提供了

在運行時判斷任意一個對象所屬的類(class)
在運行時構造任意一個類的對象(Constructor)
在運行時判斷任意一個類所具備的成員變量和方法(Field)
在運行時調用任意一個對象的方法(Method)
複製代碼
  1. 獲得構造器

    Constructor getConstructor(Class[] params) -- 得到使用特殊的參數類型的公共構造函數, 
     
    Constructor[] getConstructors() -- 得到類的全部公共構造函數 
     
    Constructor getDeclaredConstructor(Class[] params) -- 得到使用特定參數類型的構造函數(與接入級別無關) 
     
    Constructor[] getDeclaredConstructors() -- 得到類的全部構造函數(與接入級別無關)
    複製代碼
  2. 得到字段信息

    Field getField(String name) -- 得到命名的公共字段
    Field[] getFields() -- 得到全部公共字段
    Field getDeclaredField(String name) -- 得到類聲明的命名的字段
    Field[] getDeclaredFields() -- 得到類聲明的全部字段
    複製代碼
  3. 得到方法信息

    Method getMethod(String name, Class[] params) -- 使用特定的參數類型,得到命名的公共方法 
     
    Method[] getMethods() -- 得到類的全部公共方法 
     
    Method getDeclaredMethod(String name, Class[] params) -- 使用特寫的參數類型,得到類聲明的命名的方法 
     
    Method[] getDeclaredMethods() -- 得到類聲明的全部方法
    
    複製代碼
相關文章
相關標籤/搜索