栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java反射学习

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java反射学习

反射 什么是反射

归结为一句话:在运行时才知道操作的类,并且可以获取类的完整构造,并调用对应的方法。

反射能做什么
  • 获取对象的属性,并且能对属性的值进行修改
  • 获取任意类的名称、package信息,所有属性、方法、注解、类型、类加载器等等
  • 实例化任意一个类的对象
  • 调用任意对象的方法
  • 判断任意一个对象所属的类
  • 通过反射我们可以实现动态装配,降低代码的耦合度,动态代理
反射获取Class对象
Class aClass = object.getClass();
Class clazz2 = User.class;
Class aClass = Class.forName("类的全路径");
创建类对象
//class对象创建类对象
Object newInstance = aClass.newInstance();
//无参构造创建对象
Object o = aClass.getConstructor().newInstance();
//有参构造创建对象,String类的参数
Object o1 = aClass.getDeclaredConstructor(String.class).newInstance();
反射获取属性值和名称
public class ReflexTest {
    private void getFiledData(Object object) throws IllegalAccessException {
        Class aClass = object.getClass();
        //获取所有属性对象(public和非public)
        //getDeclaredField(String name)  指定属性名称
        Field[] fields = aClass.getDeclaredFields();
        //父类
        Class superclass = aClass.getSuperclass();
        Field[] superFields = superclass.getDeclaredFields();
        for (Field superField : superFields) {
            //关闭方法的公有或者私有检测
            superField.setAccessible(true);
            //属性值
            Object filedValue = superField.get(object);
            //属性名称
            String filedName = superField.getName();
            //修改属性值
            Object newInstance = aClass.newInstance();
            superField.set(newInstance,"修改后的值");
        }
        for (Field field : fields) {
            field.setAccessible(true);
            Object filedValue = field.get(object);
            String filedName = field.getName();
        }
    }
}
反射获取方法
//指定获取方法
Method method = aClass.getMethod("方法名");
//获取所有public方法
Method[] methods = aClass.getMethods();
//指定获取public和非public的方法
Method declaredMethod = aClass.getDeclaredMethod("方法名");
//获取所有public和非public的方法
Method[] declaredMethods = aClass.getDeclaredMethods();

//调用方法
Object returnValue = declaredMethod.invoke("参数");
反射原理

Java项目编译时,java文件会被编译成.class文件,.class文件在程序运行时会被类加载器加载到JVM中,类被加载后,JVM就会自动产生一个Class对象,该对象就可以获取类的属性/方法/构造方法等等

反射的应用

spring的IOC 、动态配置、动态代理等等

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/874648.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号