自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

深入剖析JAVA反射機(jī)制強(qiáng)大功能

開發(fā) 后端
JAVA反射機(jī)制是在運行狀態(tài)中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調(diào)用它的任意一個方法。

本文向大家描述一下JAVA反射機(jī)制的概念,JAVA反射機(jī)制:“程序運行時,允許改變程序結(jié)構(gòu)或變量類型,這種語言稱為動態(tài)語言”。從這個觀點看,Perl,Python,Ruby是動態(tài)語言,C++,Java,C#不是動態(tài)語言。

JAVA反射機(jī)制定義:  

JAVA反射機(jī)制是在運行狀態(tài)中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調(diào)用它的任意一個方法;這種動態(tài)獲取的信息以及動態(tài)調(diào)用對象的方法的功能稱為java語言的反射機(jī)制?! ?/p>

Java反射機(jī)制主要提供了以下功能:在運行時判斷任意一個對象所屬的類;在運行時構(gòu)造任意一個類的對象;在運行時判斷任意一個類所具有的成員變量和方法;在運行時調(diào)用任意一個對象的方法;生成動態(tài)代理?! ?/p>

有時候我們說某個語言具有很強(qiáng)的動態(tài)性,有時候我們會區(qū)分動態(tài)和靜態(tài)的不同技術(shù)與作法。我們朗朗上口動態(tài)綁定(dynamicbinding)、動態(tài)鏈接(dynamiclinking)、動態(tài)加載(dynamicloading)等。然而“動態(tài)”一詞其實沒有絕對而普遍適用的嚴(yán)格定義,有時候甚至像對象導(dǎo)向當(dāng)初被導(dǎo)入編程領(lǐng)域一樣,一人一把號,各吹各的調(diào)?! ?/p>

一般而言,開發(fā)者社群說到動態(tài)語言,大致認(rèn)同的一個定義是:“程序運行時,允許改變程序結(jié)構(gòu)或變量類型,這種語言稱為動態(tài)語言”。從這個觀點看,Perl,Python,Ruby是動態(tài)語言,C++,Java,C#不是動態(tài)語言?! ?/p>

盡管在這樣的定義與分類下Java不是動態(tài)語言,它卻有著一個非常突出的動態(tài)相關(guān)機(jī)制:Reflection。這個字的意思是“反射、映象、倒影”,用在Java身上指的是我們可以于運行時加載、探知、使用編譯期間完全未知的classes。換句話說,Java程序可以加載一個運行時才得知名稱的class,獲悉其完整構(gòu)造(但不包括methods定義),并生成其對象實體、或?qū)ζ鋐ields設(shè)值、或喚起其methods1。這種“看透class”的能力(theabilityoftheprogramtoexamineitself)被稱為introspection(內(nèi)省、內(nèi)觀、反?。?。Reflection和introspection是常被并提的兩個術(shù)語?! ?/p>

Java如何能夠做出上述的動態(tài)特性呢?

這是一個深遠(yuǎn)話題,本文對此只簡單介紹一些概念。整個篇幅最主要還是介紹ReflectionAPIs,也就是讓讀者知道如何探索class的結(jié)構(gòu)、如何對某個“運行時才獲知名稱的class”生成一份實體、為其fields設(shè)值、調(diào)用其methods。本文將談到j(luò)ava.lang.Class,以及java.lang.reflect中的Method、Field、Constructor等等classes。

【編輯推薦】

  1. 關(guān)于Java反射機(jī)制的一個實例
  2. JAVA反射機(jī)制的簡單應(yīng)用
  3. Java編譯過程與c/c++編譯過程有何不同
  4. Java虛擬機(jī)發(fā)展回顧 為跨平臺而生
  5. Java虛擬機(jī)(JVM)中的內(nèi)存設(shè)置詳解

 

責(zé)任編輯:佚名 來源: hi.baidu.com
相關(guān)推薦

2010-03-19 09:34:42

Cisco 2600模

2012-02-08 09:53:25

Java反射

2010-03-22 15:07:58

2009-09-08 10:35:24

LINQ技術(shù)

2012-02-08 09:44:52

Java反射

2010-01-07 16:20:21

千兆以太網(wǎng)交換機(jī)

2010-03-04 13:36:55

openSUSE

2012-02-08 10:12:19

Java反射

2025-02-27 00:37:06

2012-02-08 10:37:42

Java反射

2010-08-04 13:52:53

Flex事件機(jī)制

2010-08-13 16:10:11

FlexCSS

2009-09-10 16:01:26

介紹LINQ

2009-08-26 18:15:39

ibmdwFlex

2010-08-06 14:23:25

FlexCSS

2009-12-24 11:13:21

2010-09-17 13:02:11

JAVA反射機(jī)制

2010-06-23 16:42:33

2010-04-27 17:58:17

Oracle 9i

2010-03-05 09:19:54

Android系統(tǒng)
點贊
收藏

51CTO技術(shù)棧公眾號