定义及应用场景参考: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