- 什么是反射?
简言之就是把.class文件转换为java认识的形式,通过反射机制访问类的方法,属性,和构造函数。即
1,反编译:.class-->.java
2.通过反射机制访问java对象的属性,方法,构造方法等;
- 反射机制适应场景?
创建一个对象可以通过new的形式,但有没有不通过new形式创建对象的呢?答案是反射机制,如jdbc连接数据库使用Class.forname(com.mysql.jdbc.Driver);但new的形式效率更高。因此,反射使用场 景如下:
- Jdbc 加载驱动-----
- Spring ioc
- 常用框架
- 一些注解的底层实现,生成sql语句
- 反射机制装逼代码,访问类的私有变量
public static void main(String [] args) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException, InstantiationException {
/*
通过java反射机制访问私有成员
*/
//获取当前class类地址
//Class<?> forName=Class.forName("Entity.UserEntity");
// forName
Class<?> forName = Class.forName("Entity.UserEntity");
Field useId = forName.getDeclaredField("id");
Object obj=forName.newInstance();
//允许访问私有成员变量
useId.setAccessible(true);
useId.set(obj,"123");
UserEntity user=(UserEntity) obj;
System.out.println(user.getId());
}