反射Class

class類的使用

方法的反射

成員變量的反射

構(gòu)造函數(shù)的反射

Java類加載機(jī)制

反射幫我們做一些程序運(yùn)行時(shí)刻的事情。

靜態(tài)的成員,普通數(shù)據(jù)類型不是對(duì)象。

類是class的對(duì)象。

屬性名稱規(guī)范:如果第一個(gè)首字母是大寫,則第二個(gè)字母也應(yīng)該是大寫,如果是第一個(gè)字母是小寫則沒有問(wèn)題(如果不按規(guī)范來(lái),用到Java反射的時(shí)候可能會(huì)找不到對(duì)應(yīng)的set/get方法)

萬(wàn)物皆對(duì)象,一個(gè)類可以實(shí)例化一個(gè)對(duì)象,一個(gè)類也是Class的一個(gè)對(duì)象,c為Person的類類型(class type),表示Person是一個(gè)對(duì)象,Class的對(duì)象,任何一個(gè)類都是Class的實(shí)例對(duì)象,有三種表示方式,如下所示:

//事例告訴我們?nèi)魏我粋€(gè)類都有一個(gè)靜態(tài)成員屬性

Class c= Person.class

1.所有類的對(duì)象都是class的實(shí)例。

獲取class對(duì)象的三種方法

《1》 Class person = Class.forName("Person");//常用方法

《2》

?

Class

?

person = new Person.getClass();

《3》

?

Class?

person = Person.class

一個(gè)類只可能是Class類的一個(gè)實(shí)例對(duì)象。 以上person是相同的。


可以通過(guò)類的類類型創(chuàng)建類的對(duì)象實(shí)例。(動(dòng)態(tài)加載一個(gè)類,編譯時(shí)刻加載類是靜態(tài)加載類,運(yùn)行時(shí)刻加載類是動(dòng)態(tài)加載類)

Person person = (Person)person.newInstance(); //必須要有無(wú)參的構(gòu)造方法



類是class的一個(gè)實(shí)例,基本的數(shù)據(jù)類型也是(int,String,void)

//new 創(chuàng)建對(duì)象是靜態(tài)加載類,在編譯時(shí)刻就需要加載所有的可能使用到的類。

c1.getName();


person.getDeclaredFields()//獲得自己聲明的一些屬性,不包括父類的

person.

getFields()//可以獲得自己和父類的一些public方法

Person person = (Person)person.newInstance(); //必須要有無(wú)參的構(gòu)造方法


Method類,方法的對(duì)象,一個(gè)成員方法就是一個(gè)Method對(duì)象,getMethods()方法獲取的是所有public的函數(shù),包括父類的,getDeckaredMethods()獲取的是自己聲明的,不問(wèn)訪問(wèn)類型。

2 通過(guò)class獲取對(duì)象

Class.forName("Person").getConstructors();

Object?person?=?con[0].newInstance("zld",18);

獲取類實(shí)現(xiàn)的所有接口類
Class.forName("Person").getInterfaces();

取得其他類中的父類

?demo=Class.forName("包名.Person");
?demo.getSuperClass();

用反射可能證明泛型是偽泛型,泛型只在編譯時(shí)起作用,防止錯(cuò)誤的輸入。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,993評(píng)論 19 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 31,779評(píng)論 18 399
  • 一:java概述:1,JDK:Java Development Kit,java的開發(fā)和運(yùn)行環(huán)境,java的開發(fā)工...
    ZaneInTheSun閱讀 2,691評(píng)論 0 11
  • 月初目標(biāo):60km,實(shí)際跑步12次,完成里程90km 驚喜點(diǎn):三次連跑,數(shù)字化里程(12.21km-5.21km-...
    普羅米閱讀 924評(píng)論 4 4
  • 在使用“西瓜甜甜”這個(gè)昵稱之前,我曾經(jīng)使用“Deanna”作為我的昵稱,它是我讀大學(xué)時(shí)候?yàn)榱吮阌谕饧處煹挠洃浂?..
    西瓜甜甜啦閱讀 1,047評(píng)論 19 23