Java中的反射

作者: iDevOps | 来源:发表于2019-08-05 13:46 被阅读83次
    什么是反射?
    • 反射是框架设计的灵魂
    • 正在运行的程序, 通过反射可以动态获取这个类的所有信息, 包括属性、方法、构造方法等
    • 可以反编译.class --> .java
    常见的应用场景
    • Jdbc加载驱动
    • Spring Ioc
    • 框架的封装
    通过反射获取Class对象的三种方式
    • 方式1
    Class1 = Class.forName("com.test.domain.Person");
    1. 将字节码文件加载进内存,返回Class对象
    2. 多用于配置文件,将类名定义在配置文件中, 读取文件,加载类
    
    • 方式2
    Class2 = Person.class;
    1. 通过类名的属性class获取
    2. 多用于参数的传递
    
    • 方式3
    Person p = new Person();
    Class3 = p.getClass();
    1. 通过对象方法获取
    2. 多用于对象的获取字节码的方式
    
    通过反射创建对象
    • 无参构造器
    Class<?> aClass = Class.forName("domain.Person");
    // 创建Class对象所表示对象的一个新实例,调用了Person的无参构造方法
    Object o = aClass.newInstance();
    System.out.println(o.toString()); //Person{name='null', age=0}
    
    • 有参构造器
    // 实例化有参构造函数
    Class<?> aClass = Class.forName("domain.Person");
    Constructor<?> constructor = aClass.getConstructor(String.class, Integer.class);
    Person p  = (Person) constructor.newInstance("sn", 11);
    System.out.println(p.toString());//Person{name='sn', age=11}
    
    常见Api
    方法名称 作用
    getDeclaredMethods 获取该类的所有方法
    getReturnType() 获取该类的返回值
    getParameterTypes() 获取传入参数
    getDeclaredFields() 获取该类的所有字段
    setAccessible 允许访问私有成员

    小补充: 如何禁止使用反射机机制创建对象
    答: 将构造函数私有化

    相关文章

      网友评论

        本文标题:Java中的反射

        本文链接:https://www.haomeiwen.com/subject/atfmdctx.html