定義及應用場景參考:https://www.cnblogs.com/whoislcj/p/6038511.html
簡單的使用:
package com.test;
import javax.rmi.CORBA.StubDelegate;
public class User {
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;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
String name;
int age;
String code;
public User() {
System.out.println("實例化一個User對象!");
}
@Override
public String toString() {
return "User [name"+name+",code="+code+",age="+age+"]";
}
}
package com.test;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class ReflectTest {
public static void main(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, InstantiationException {
// TODO Auto-generated method stub
User user = new User();
//利用反射機制創建一個對象
User newInstance = User.class.newInstance();
System.out.println(newInstance);
Class clazz = User.class;
Field field = clazz.getDeclaredField("name");
System.out.println("屬性名:"+field.getName());
System.out.println("屬性類型:"+field.getType().getName());
System.out.println("---------------------------------------");
//獲取一個類中的所有屬性
Field[] fields = clazz.getDeclaredFields();
for(Field f:fields) {
System.out.println("屬性名:"+f.getName());
System.out.println("屬性類型:"+f.getType().getName());
//給屬性賦值
f.setAccessible(true);// 設置爲私有屬性可以訪問
if(int.class == f.getType()) {//如果類型是int類型的
f.set(newInstance,50);
}else if(String.class == f.getType()) {
f.set(newInstance, "蔡徐坤");
}
}
System.out.println("========通過直接賦值後的結果==========");
System.out.println(newInstance);
//獲取得到賦值後的值
System.out.println(user.getAge()+":"+user.getCode()+":"+user.getName());
System.out.println("========獲取所有方法==========");
// 獲取所有方法 不包括構造方法
Method[] methods = clazz.getDeclaredMethods();
for(Method m : methods) {
String methodName = m.getName();// 參數名稱
int parameterCount = m.getParameterCount();// 參數個數
System.out.println("方法名字:" + methodName);
System.out.println("方法參數個數:" + parameterCount);
Class<?>[] parameterTypes = m.getParameterTypes();//參數類型
//獲取每個方法的參數類型
for(Class<?> class1:parameterTypes) {
System.out.println("參數類型:"+class1.getName());
}
//獲取方法的返回值
Class<?> returnType = m.getReturnType();
System.out.println("方法的返回值爲:" + returnType.getName());
System.out.println("-------------------");
}
}
}
具體使用參照:https://blog.csdn.net/qq_40896997/article/details/94483820