@Data
@NoArgsConstructor
@AllArgsConstructor
public class QueueTest {
private String date = "2021";
private int number;
}
public class GetBean {
static String path = "com.test.queue.QueueTest";
// 反射获取类的类名、属性名、属性类型、方法、执行方法、构造函数
public static void start() throws Exception {
Class clazz = Class.forName(path);
/**
* 获取类名
*/
// 获取完整类名com.skd.queue.QueueTest
String strName01 = clazz.getName();
// 直接获取类名 QueueTest
String strName02 = clazz.getSimpleName();
/**
* 获取属性
*/
// 返回属性为public的字段
Field[] field01 = clazz.getFields();
// 返回所有的属性
Field[] field02 = clazz.getDeclaredFields();
// 获取属性为id的字段
Field field03 = clazz.getDeclaredField("date");
/**
* 获取普通方法
*/
// 返回public方法
Method[] Method01 = clazz.getDeclaredMethods();
// 返回getDate这个方法,如果没有参数,就默认为null
Method method = clazz.getDeclaredMethod("getDate", null);
/**
* 获取构造方法
*/
// 获取无参的构造函数这里的前提的保证类中应该有无参的构造函数
QueueTest u1 = (QueueTest) clazz.newInstance();
// 获取参数为(String,int)的构造函数
Constructor c2 = clazz.getDeclaredConstructor(String.class, int.class);
// 通过有参构造函数创建对象
QueueTest u2 = (QueueTest) c2.newInstance("小小", 18);
// 通过反射调用普通方法
QueueTest u3 = (QueueTest) clazz.newInstance();
Method method03 = clazz.getDeclaredMethod("setDate", String.class);
// 把对象u3的date设置为8888
method03.invoke(u3, "8888");
// 通过反射操作普通的属性
QueueTest u4 = (QueueTest) clazz.newInstance();
Field f = clazz.getDeclaredField("date");
// 设置属性可以直接的进行访问
f.setAccessible(true);
f.set(u4, "石头");
}
}