类加载器
将我们的class文件读取到内存中 注意对于类的加载只进行一次
public class Main {
public static void main(String[] args) {
UserEntity p1 = new UserEntity();
UserEntity p2 = new UserEntity();
System.out.println(UserEntity.class);
System.out.println(p1.getClass());
System.out.println(p2.getClass());
}
}
结果-->>>
反射API
对象创建API
//获取对应class
Class<?> aClass = Class.forName("UserEntity")
//new 无参构造 创建对象
UserEntity userEntity = (UserEntity) aClass.newInstance(); System.out.println(userEntity);
//new 有参构造 创建对象
Constructor<?> constructor = aClass.getConstructor(Integer.class, String.class);
UserEntity user = (UserEntity)constructor.newInstance(12, "张三"); System.out.println(user);
属性API
获取对象中所有的公有属性
Field[] fields = aClass.getFields();
获取对象中的所有属性
Field[] fields = aClass.getDeclaredFields();
属性赋值
Field nameField = aClass.getDeclaredField("name");
完整代码
Class<?> aClass = Class.forName("UserEntity");
UserEntity userEntity = (UserEntity)aClass.newInstance();
//声明赋值属性名
Field nameField = aClass.getDeclaredField("name");
//设置true对私有属性进行赋值
nameField.setAccessible(true);
//对属性进行赋值 参数1为对应类名 参数2为所有赋值的值
nameField.set(userEntity, "John");
System.out.println(userEntity.getName()); //输出John
对象方法获取
//获取所有公有方法 包含父类方法 返回数组
Method[] methods = aClass.getMethods();
//获取对象所有方法 不包含父类方法 返回数组
Method[] declaredMethods = aClass.getDeclaredMethods();
//调用方法
Method m1 = aClass.getMethod("方法名", 参数类型1.class, 参数类型2.class...);
返回类型 result = (返回类型)m1.invoke(类名, 参数1, 参数2);