真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java中的反射機制是什么意思

這篇文章給大家分享的是有關(guān)Java中的反射機制是什么意思的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

在遵化等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè) 網(wǎng)站設(shè)計制作按需求定制制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計,網(wǎng)絡(luò)營銷推廣,外貿(mào)營銷網(wǎng)站建設(shè),遵化網(wǎng)站建設(shè)費用合理。

今天我們就來講講java的反射機制。

當(dāng)程序主動使用某個類的時候,如果該類還沒有被加載到內(nèi)存中,則系統(tǒng)會通過加載、連接、初始化這三個步驟對該類進行初始化,有時候會把這一整個流程叫做類加載器或類初始化

類加載時值將類文件讀入到內(nèi)存中,并且為該類創(chuàng)建一個對象、之后可以直接通過對象來調(diào)用類及其實現(xiàn)的父類方法和屬性

一、反射機制到底是什么:類是由一組對象(擁有著共同屬性)來組成的,而類與類之間也有共同的屬性、構(gòu)造方法、方法等結(jié)構(gòu),用來描述類的特性,即可以調(diào)用或查看某個類的屬性、方法、即構(gòu)造方法就叫做反射。

二、java反射機制的好處:

1.極大的提高了應(yīng)用程序的擴展性,之前都是通過多來將子類對象傳遞給父類應(yīng)用來實現(xiàn)的,大大的增加了代碼的耦合性,并且無法訪問真實對象的信息,這個時候就可以采取使用反射機制。

2.當(dāng)代碼需要后期維護的時候,則需要修改很多地方,而通過反射機制,只需要直接修改一個地方即可。

e.g Person person=new Student();

三、應(yīng)用場景:一般應(yīng)用于底層框架的應(yīng)用,不過大部分都已經(jīng)封裝好了的、以及可以實現(xiàn)工廠模式和代理模式等設(shè)計模式,同時也可以解決java泛型擦除等令人苦惱的問題

一個類的組成:

成員變量、成員方法、構(gòu)造方法、修飾符、包等

四、反射的組成:1.Class(類本身) 2.Field(屬性) 3.Method(方法)

接下來就直接進入代碼階段吧:

一、獲取類的三種方法:

Person person = new Person();

1.Class clazz = Person.class;//通過類來獲取對象

2.Class clazz = Class.forName("Reflect.Person");//通過類權(quán)限名(包名.類名)來獲取Class對象

//Class.forName會拋出異常,因為根據(jù)字符串來找到類,所以可能會出現(xiàn)找不到這樣的類異常

3.Class clazz = person.getClass();//通過類對象來調(diào)用

二、自身類

Class []interfaces = clazz.getInterfaces();//獲取Person類里所有的接口

String classname = clazz.getName();//獲取類名字(包名.類名)

String simpleName = clazz.getSimpleName(); //僅僅只是獲得類名字,并沒有包名

int modifiers = clazz.getModifiers();//獲取權(quán)限符是什么 返回值是int 1:public 2:private依次

Package aPackage = clazz.getPackage();//獲得包名

Class superclass = clazz.getSuperclass();//獲取該類的父類,有且只有一個

Object o = clazz.newInstance();//生成類的實例對象,由于不知道要生成什么類的對象,而所有類的頂端都是Object的子類鄭州哪家醫(yī)院人流好 http://www.120csfkyy.com/

三、屬性(Filed)

Field math = clazz.getField("math");//獲得指定的name屬性,有且只能找到public的屬性

Field[] fields = clazz.getFields();//獲得所有的public的屬性,以及父類

Field id = clazz.getDeclaredField("id");//獲得public 以及private、protected等指定(id)屬性

Field[] declaredFields = clazz.getDeclaredFields();//獲得所有的屬性以及父類

當(dāng)然找到屬性能干嘛了,最重要的就是賦值啦。

由于私有屬性,除了本類以外的類都不可進行其訪問,所以在設(shè)置值上面自然和public的不太一樣

public屬性設(shè)值:

Field name = clazz.getField("name");

name.set(o,"TTL");//第一個屬性是要設(shè)置值得屬性屬于哪個類實例化對象里面的,第二個參數(shù)則是要設(shè)置的值

private屬性設(shè)置:

Field sex = clazz.getDeclaredField("sex");

sex.setAccessible(true);//設(shè)置訪問權(quán)限

sex.set(person1,"女");

四、方法

Method setAddress = clazz.getMethod("Address", String.class);

//第一個參數(shù)為要找方法的名字,第二個參數(shù)則是要找方法的形參是什么類型的

Object address = setAddress.invoke(person1, "蘇州");

//第一個參數(shù)為類實例化的對象,第二個參數(shù)為參數(shù)要設(shè)置的值

//執(zhí)行方法

五、構(gòu)造方法

Constructor constructor = clazz.getConstructor(String.class, String.class);

//由于構(gòu)造方法和類名一樣,這里就不需要在此寫類名對象了,只需寫參數(shù)即可匹配到對應(yīng)的構(gòu)造方法

constructor.newInstance("TTL","四川");//執(zhí)行構(gòu)造方法

感謝各位的閱讀!關(guān)于“Java中的反射機制是什么意思”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!


當(dāng)前名稱:Java中的反射機制是什么意思
分享地址:http://weahome.cn/article/pcpoed.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部