您好,登錄后才能下訂單哦!
這篇文章主要講解了“java中反射是什么意思”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“java中反射是什么意思”吧!
一、反射概述
二、常用api
三、創建Class對象的四種方式
Reflection(反射)是被視為動態語言的關鍵,反射機制允許程序在執行期借助于Reflection API取得任何類的內部信息,并能直接操作任意 對象的內部屬性及方法。 加載完類之后,在堆內存的方法區中就產生了一個Class類型的對象 (一個類只有一個Class對象),這個對象就包含了完整的類的結構信 息。我們可以通過這個對象看到類的結構,這個對象就像一面鏡子,透 過這個鏡子看到類的結構,所以我們形象的稱之為反射。
java.lang.Class
:代表一個類
java.lang.reflect.Method
:代表類的方法
java.lang.reflect.Field
:代表類的成員變量
java.lang.reflect.Constructor
:代表類的構造器
static Class forName(String name)
返回指定類名 name 的 Class 對象
Object newInstance()
調用無參構造函數,返回該Class對象 的一個實例
getName()
返回此Class對象所表示的實體(類、 接口、數組類、基本類型或void)名稱
Class getSuperClass()
返回當前Class對象的父類的Class對象
Class [] getInterfaces()
獲取當前Class對象的接口
ClassLoader getClassLoader()
返回該類的類加載器
Class getSuperclass()
返回表示此Class所表示的實體的超類的Class
Constructor[] getConstructors()
返回一個包含某些Constructor對象的數組
Field[] getDeclaredFields()
返回Field對象的一個數組 Method
getMethod(String name,Class … paramTypes)
返回一個Method對象,此對象的形參類型為paramType
示例:
public class Person { private String name; private int age; public Person() { System.out.println("Person類被初始化了。。。。。^_^"); } public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
反射
public class ClassDemo { public static void main(String[] args) throws Exception { // 1. 創建Class對象 //Class<Person> clazz = (Class<Person>) Class.forName("Person"); Class<?> clazz =Class.forName("Person"); // 2. 通過Class對象調用其方法 // 2.1. 通過反射來實例化對象 //Person person = clazz.newInstance(); Object o = clazz.newInstance(); // 此名就相當于 Person p = new Person() // 2.2. 獲取類的完整類名稱(包名+類名) String name = clazz.getName(); System.out.println(name); // 2.3. 獲取類的簡單名稱,就是類的名稱,不含包名 System.out.println(clazz.getSimpleName()); // 2.4. 獲取構造器 Constructor<?>[] constructors = clazz.getConstructors(); for (Constructor<?> constructor : constructors) { System.out.println(constructor.getName()); } // 2.5. 獲取字段 Field[] fields = clazz.getFields(); for (Field field : fields) { System.out.println(field.getName()); } // 2.6. 獲取方法 Method[] methods = clazz.getMethods(); for (Method method : methods) { System.out.println(method.getName()); } } }
public class Demo { public static void main(String[] args) throws Exception { // 第一種方式:調用Class.forName() Class clazz =Class.forName("java.lang.String"); // 第二種方式:通過類的字節碼文件來創建 Class clazz1 = String.class; // 第三種方式:通過調用對象的getClass()方法來創建 String str = new String(); Class clazz2 = str.getClass(); // 第四種:通過類裝載器來創建 ClassLoader loader =String.class.getClassLoader(); Class<?> clazz3 =loader.loadClass("java.lang.String"); } }
感謝各位的閱讀,以上就是“java中反射是什么意思”的內容了,經過本文的學習后,相信大家對java中反射是什么意思這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。