1.反射:简单的说就是在运行时装配代码(运行时才加载),不需要在编译时进行代码代码链接。
2.使用反射时会在API中使用到的类:
Java.lang.Class
Java.lang.reflect.Constrctor
Java.lang.reflect.Method
Java.lang.reflect.Field
Java.lang.reflect.Modifier
3.作用:
(1)在Java中可以用于反编译,将.class文件反编译为.java文件,然后就可以访问Java对象中的属性和方法。
Class c = Class.forName("com.study.entity.Users");//反射读取Users实体类 Object o = c.newInstance();//调用的就是无参构造函数 //获取类中的属性名为age的属性 Field f = c.getDeclaredField("age"); //打破封装性给属性赋值 f.setAccessible(true); f.set(o,20);//设置属性值 System.out.println(f.get(o));//获取属性值
获取类所有属性:(包括修饰符 属性类型全称 属性名)
获取类所有函数:(包括修饰符 返回值类型全称 方法名)Field[] f1 = c.getDeclaredFields();
Method[] ms = c.getDeclaredMethods();
(2)实际开发中常用反射去加载配置文件
Hibernate框架加载配置文件:
//创建Configuration对象 Configuration cfg = new Configuration(); //加载注册文件 cfg.configure("hibernate.cfg.xml");
(3)使用反射加载属性文件
InputStream in = Object.class.getResourceAsStream("/mysql.properties");//使用反射加载属性文件并创建输入流对象 Properties p = new Properties();//创建属性列表对象 p.load(in);//从输入流读取属性列表 System.out.println(p.getProperty("username").trim());