反射機制

一、概述

反射機制是Java動態(tài)性之一,而說到動態(tài)性首先得了解動態(tài)語言。那么何為動態(tài)語言?

動態(tài)語言

動態(tài)語言,是指程序在運行時可以改變其結(jié)構(gòu):新的函數(shù)可以引進,已有的函數(shù)可以被刪除等結(jié)構(gòu)上的變化。比如常見的JavaScript就是動態(tài)語言,除此之外Ruby,Python等也屬于動態(tài)語言,。從動態(tài)語言能在運行時改變程序結(jié)構(gòu)或者變量類型上看,Java和C、C++一樣都不屬于動態(tài)語言。但是JAVA卻有一個非常突出的與動態(tài)相關(guān)的機制:反射機制。
Java通過反射機制,可以在程序運行時加載,探知和使用編譯期間完全未知的類,并且可以生成相關(guān)類對象實例,從而可以調(diào)用其方法或則改變某個屬性值。所以JAVA也可以算得上是一個半動態(tài)的語言。

二、反射機制

概念

在Java中的反射機制是指在運行狀態(tài)中,對于任意一個類都能夠知道這個類所有的屬性和方法;并且對于任意一個對象,都能夠調(diào)用它的任意一個方法;這種動態(tài)獲取信息以及動態(tài)調(diào)用對象方法的功能成為Java語言的反射機制。

應(yīng)用場合

在Java程序中許多對象在運行時都會出現(xiàn)兩種類型:編譯時類型和運行時類型。 編譯時的類型由聲明對象時實際的類型來決定,運行時的類型由實際賦值給對象的類型決定 如: Person p=new Student();其中編譯時類型為Person,運行時類型為Student。
除此之外,程序在運行時還可能接收到外部傳入的對象,該對象的編譯時類型為Object,但是程序有需要調(diào)用該對象的運行時類型的方法。為了解決這些問題,程序需要在運行時發(fā)現(xiàn)對象和類的真實信息。然而,如果編譯時根本無法預知該對象和類屬于哪些類,程序只能依靠運行時信息來發(fā)現(xiàn)該對象和類的真實信息,此時就必須使用到反射了。

三、Java反射API

反射API用來生成JVM中的類、接口或者對象的信息。

  • Class類:反射的核心類,可以獲取類的屬性,方法等信息。
  • Field類:Java.lang.reflec包中的類,表示類的成員變量,可以用來獲取和設(shè)置類之中的屬性值。
  • Method類: Java.lang.reflec包中的類,表示類的方法,它可以用來獲取類中的方法信息或者執(zhí)行方法。
  • Constructor類: Java.lang.reflec包中的類,表示類的構(gòu)造方法。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容