一、反射机制二、反射创建对象三、反射获取类方法信息四、反射获取类属性五、反射调用构造函数
一、反射机制什么是java反射:就是正在运行,动态获取这个类的所有信息反射机制的作用
反编译:.class–>.java使用反射机制可以获取类的属性、方法、实例化对象 反射应用场景
jdbc连接springIOC底层使用反射机制DOM4J框架hibernate、mybatis 二、反射创建对象
public class UserEntity {
private String userName;
public UserEntity() {
System.out.println("对象初始化...");
}
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
// 2.使用Java的反射机制创建对象 类的完整路径
Class> forName = Class.forName("com.sjyl.UserEntity");
// 3.使用反射机制创建对象
UserEntity userEntity = (UserEntity) forName.newInstance();
userEntity.userName = "反射对象";
System.out.println(userEntity.userName);
}
}
三、反射获取类方法信息
Class> forName = Class.forName("com.sjyl.UserEntity");
Method[] methods = forName.getMethods();
for (Method method : methods) {
System.out.println(method.getName());
}
四、反射获取类属性因为我们任何一个类的父类都是Object,所以会有如下的方法
getFields:只能获取到公有的方法getDeclaredFields:能获取到所有的方法,包含私有的方法
public class UserEntity {
private String userName;
public int Age;
public UserEntity() {
System.out.println("对象初始化...");
}
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
// 2.使用Java的反射机制创建对象 类的完整路径
Class> forName = Class.forName("com.sjyl.UserEntity");
Field[] fields = forName.getDeclaredFields();
for (Field field : fields) {
System.out.println(field.getName());
}
}
}
五、反射调用构造函数
public class UserEntity {
private String userName;
private UserEntity() {
System.out.println("对象初始化...");
throw new RuntimeException();
}
private UserEntity(String userName) {
System.out.println("userName:" + userName);
this.userName = userName;
}
}
public class Test {
public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
Class> forName = Class.forName("com.itmayiedu.UserEntity");
constructor.setAccessible(true);
Constructor> constructor = forName.getDeclaredConstructor(String.class);
UserEntity userEntity = (UserEntity) constructor.newInstance("Hello");
}
}



