什么是Java反射

就是正在运行,动态获取这个类的所有信息。

反射机制的作用

1,反编译:.class–>.java
2.通过反射机制访问java对象的属性,方法,构造方法等;

反射机制的应用场景

Jdbc 加载驱动-----
Spring IOC
框架

反射机制获取类有三种方法

//第一种方式:  
	Classc1 = Class.forName("Employee");  
	//第二种方式:  
	//java中每个类型都有class 属性.  
	Classc2 = Employee.class;     
	//第三种方式:  
	//java语言中任何一个java对象都有getClass 方法  
	Employeee = new Employee();  
	Classc3 = e.getClass(); //c3是运行时类 (e的运行时类是Employee)  	

反射创建对象的方式

	Class<?> forName = Class.forName("com.itmayiedu.entity.User");
		// 创建此Class 对象所表示的类的一个新实例 调用了User的无参数构造方法.
		Object newInstance = forName.newInstance();
实例化有参构造函数
		Class<?> forName = Class.forName("com.itmayiedu.entity.User");
		Constructor<?> constructor = forName.getConstructor(String.class, String.class);
		User newInstance = (User) constructor.newInstance("123", "123");

反射创建api

getDeclaredMethods获取到当前类(不包含继承来)的方法
反射机制_编程语言

使用反射为类私有属性赋值

// 为user对象私有属性赋值
		Class<?> classUser = Class.forName("com.itmayiedu.entity.User");
		// 获取到当前的所有属性
		Field[] fields = classUser.getDeclaredFields();
		for (Field field : fields) {
			System.out.println(field.getName());
		}
		// 获取当前所有的方法
		Method[] declaredMethods = classUser.getDeclaredMethods();
		for (Method method : declaredMethods) {
			System.out.println(method.getName());
		}
		// 初始化对象
		User user = (User) classUser.newInstance();
		Field declaredField = classUser.getDeclaredField("id");
		// 标记为true 允许反射赋值,暴力反射
		declaredField.setAccessible(true);
		declaredField.set(user, "20");
		System.out.println("使用反射机制给id赋值为:"+user.getId());