生活随笔
收集整理的這篇文章主要介紹了
反射(Reflection)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
能夠分析類能力的程序稱為反射。
- 檢查類的結構(反射機制最重要的內容)
- 使用反射在運行時分析對象
- 使用反射編寫泛型數組代碼
- 調用任意方法與構造器
動態語言的關鍵,允許程序在執行期間借助 Reflection API 取得任何類的內部信息,并能直接操作任意對象的內部屬性及方法
因為在編譯的時候并沒有實例化對象,只有在運行時才能確定
加載完類之后,在堆內存的方法區中就產生了一個 Class類型的對象(一個類只有一個Class對象),這個對象就包含了完整的類的結構信息。我們可以通過這個對象看到類的結構。
這個對象就像一面鏡子,透過這個鏡子看到類的結構,所以,我們形象的稱之為:反射。
在運行時判斷一個對象所屬的類在運行時構造一個類的對象在運行時判斷一個類所具有的成員變量和方法在運行時獲取泛型信息在運行時調用對象的成員變量和方法在運行時處理注解生成動態代理
反射源頭:Class類,代表某一個運行時類,動態概念 (代表加載到內存中的某一個結構,類、接口、數組、注解···)
Class personClass
= Person.class;
Person person
= new Person();
Class personClass1
= person
.getClass();
Class forName
= Class.forName("xyz.tylt.learn.test.Person");
ClassLoader classLoader
= ATest.class.getClassLoader();
Class loadClass
= classLoader
.loadClass("xyz.tylt.learn.test.Person");
package xyz.tylt.learn.test;public class Person {private String name
;public String password
;public Person() {}private Person(String name
) {this.name
= name
;}public Person(String name
, String password
) {this.name
= name
;this.password
= password
;}public String getName() {return name
;}public void setName(String name
) {this.name
= name
;}public String getPassword() {return password
;}public void setPassword(String password
) {this.password
= password
;}@Overridepublic String toString() {return "Person{" +"name='" + name
+ '\'' +", password='" + password
+ '\'' +'}';}public void show(){System.out
.println("你好呀,我是公開的方法");}private void pshow(){System.out
.println("我是私有的方法");}}
Person person
= new Person("Tom", "123456");
System.out
.println(person
);person
.show();
Class<Person> personClass
= Person.class;
Constructor<Person> constructor
= personClass
.getConstructor(String.class, String.class);
Person person
= constructor
.newInstance("Tom", "123456");
System.out
.println(person
);
Class personClass
= Person.class;
Constructor declaredConstructor
= personClass
.getDeclaredConstructor(String.class);declaredConstructor
.setAccessible(true);Person person
= (Person) declaredConstructor
.newInstance("Tom");Method pshow
= personClass
.getDeclaredMethod("pshow");pshow
.setAccessible(true);pshow
.invoke(person
);
Field name
= personClass
.getDeclaredField("name");name
.setAccessible(true);name
.set(person
, "Jerry");System.out
.println(person
);
總結
以上是生活随笔為你收集整理的反射(Reflection)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。