反射Class

class類的使用

方法的反射

成員變量的反射

構造函數的反射

Java類加載機制

反射幫我們做一些程序運行時刻的事情。

靜態的成員,普通數據類型不是對象。

類是class的對象。

屬性名稱規范:如果第一個首字母是大寫,則第二個字母也應該是大寫,如果是第一個字母是小寫則沒有問題(如果不按規范來,用到Java反射的時候可能會找不到對應的set/get方法)

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

//事例告訴我們任何一個類都有一個靜態成員屬性

Class c= Person.class

1.所有類的對象都是class的實例。

獲取class對象的三種方法

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

《2》

?

Class

?

person = new Person.getClass();

《3》

?

Class?

person = Person.class

一個類只可能是Class類的一個實例對象。 以上person是相同的。


可以通過類的類類型創建類的對象實例。(動態加載一個類,編譯時刻加載類是靜態加載類,運行時刻加載類是動態加載類)

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



類是class的一個實例,基本的數據類型也是(int,String,void)

//new 創建對象是靜態加載類,在編譯時刻就需要加載所有的可能使用到的類。

c1.getName();


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

person.

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

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


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

2 通過class獲取對象

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

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

獲取類實現的所有接口類
Class.forName("Person").getInterfaces();

取得其他類中的父類

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

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


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,993評論 19 139
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,779評論 18 399
  • 一:java概述:1,JDK:Java Development Kit,java的開發和運行環境,java的開發工...
    ZaneInTheSun閱讀 2,691評論 0 11
  • 月初目標:60km,實際跑步12次,完成里程90km 驚喜點:三次連跑,數字化里程(12.21km-5.21km-...
    普羅米閱讀 924評論 4 4
  • 在使用“西瓜甜甜”這個昵稱之前,我曾經使用“Deanna”作為我的昵稱,它是我讀大學時候為了便于外籍教師的記憶而取...
    西瓜甜甜啦閱讀 1,047評論 19 23