JAVA反射機制的簡單例項和說明
阿新 • • 發佈:2018-12-23
一:反射機制的作用主要是:
1:可以將.class檔案轉為.java檔案,實現反編譯
2:可以通過類的名字得到這個JAVA物件中所有的屬性和方法。
3:用的最多的就是spring框架了。因為我們在配置檔案中配置好類的應射關係後,就可以通過反射機制自動找它的屬性和方法了。框架再複雜也是使用的這種基本原理,只是它在上面又做了很多封裝。
主要用到以下幾個類:
java.lang.Class
java.lang.reflect.Constructor
java.lang.reflect.Field
java.lang.reflect.Method
java.lang.Modifier
這幾個類的詳細使用方法可以參看JDK的文件,上面都有詳細介紹,這也是我們學習時最好一個文件。
二:為了測試看效果。我們先建立一個實體的類
package com.common;
public class User {
private int id;
private String name;
private String sex;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
三:反射機制建立一個類的物件
package com.common;
public class ReflectTest {
public static void main(String[] args) {
try {
Class classUser = Class.forName("com.common.User");
User user = (User)classUser.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
}
}
四:獲取一個物件裡面所有的方法,一共有三種方式得到類
package com.common;
import java.lang.reflect.Method;
public class ReflectTest {
public static void main(String[] args) {
try {
/*
* 方法1
*/
Class user = Class.forName("com.common.User");
/*
* 方法2
* Class user = User.class;
*/
/*
* 方法三
User u = new User();
Class user = u.getClass();
*/
Method[] method = user.getMethods();
for(int i=0;i<method.length;i++){
System.out.print(method[i].toString());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
五:獲取一個類裡面所有的屬性和指定的一個屬性
package com.common;
import java.lang.reflect.Field;
public class ReflectTest {
public static void main(String[] args) {
try {
//得到類的class
Class classUser = Class.forName("com.common.User");
//取得所有的屬性
Field[] fields = classUser.getDeclaredFields();
for(Field field : fields){
System.out.println(field.getName());
//field物件還有很多屬性可以取到,這個可以參看JDK,這裡就不全部列出了
}
//取得一個特定的屬性
Field field = classUser.getDeclaredField("id");
field.getName();
} catch (Exception e) {
e.printStackTrace();
}
}
}
更多的取值可以參看JDK幫助文件中的java.lang.reflect包下面的類,我們在使用spring框架的時候,在配置檔案中配置了類名為什麼就能找到它所有的屬性和方法,就是通過反射機制做到的,後面我們會講spring框架的搭建和配置。慢慢來,先了解簡單的原理再深入研究是一個不錯的選擇。