@Test
void contextLoads1() throws Exception {
//获取class对象的三种方式
//user.class 直接.class获取对象
//new Class 创建对象获取对象
//user.forName forName获取对象 这种方式需要包的全路径.对象的属性或者方法
Class<User> userClass = User.class;
//反射拿类的属性
Field[] declaredField = userClass.getDeclaredFields();
for (Field field : declaredField) {
System.out.println(field);
}
//反射获取类中的方法
Method[] declaredMethods = userClass.getDeclaredMethods();
for (Method declaredMethod : declaredMethods) {
System.out.println(declaredMethod);
}
//反射获取类中的构造方法
Constructor<?>[] declaredConstructors = userClass.getDeclaredConstructors();
for (Constructor<?> declaredConstructor : declaredConstructors) {
System.out.println(declaredConstructor);
}
//获取其他信息
Package aPackage = userClass.getPackage();
String simpleName = userClass.getSimpleName();
System.out.println(aPackage+":"+simpleName);
//创建对象
User user = (User) userClass.newInstance();
System.out.println(user);
//指定构造创建
Constructor<User> declaredConstructor = userClass.getDeclaredConstructor(Integer.class, String.class);
//生成对象
User user1 = declaredConstructor.newInstance(1, "张三");
System.out.println(user1);
//给属性赋值
//获得指定的属性
Field name = userClass.getDeclaredField("name");
//private修饰的属性是不可访问的,反射是可以访问的,需要我们添加设置
name.setAccessible(true);
name.set(user1,"李四");
System.out.println(user1);
//可以执行的方法
//获取需要执行的方法
Method getName = userClass.getDeclaredMethod("getName");
String nameValue = (String)getName.invoke(user1);
System.out.println(nameValue);
Method setName = userClass.getDeclaredMethod("setName", String.class);
setName.invoke(user1,"刘浩");
System.out.println(user1.getName());
}
}
反射获取Class对象的三种方式
最新推荐文章于 2025-04-25 18:19:07 发布