美文网首页
Java反射机制

Java反射机制

作者: chad_it | 来源:发表于2017-01-16 21:20 被阅读12次

    通过反射创建一个对象(三步)
    第一步:获取类的信息
    参数:包名+类名
    Class class = Class.forName("com.javawu.reflect.Demo");
    第二步:获取类的构造方法
    参数:构造方法需要传递的参数的Class
    Constructor constructor = class.getConstructor(String.class, int.class);
    第三步:根据获取到的构造方法传递相应的参数创建对象
    Demo demo = (Demo)constructor.newInstance("张三", 55);

    反射机制是什么

    反射机制是在运行状态中,对于任意一个类,能够知道这个类的所有属性和方法,对于任意一个对象,能够调用它的任意一个方法和属性。
    这种动态获取的信息以及动态调用对象的方法的功能称为java语言的放射机制。

    反射机制能做什么

    • 在运行时判断任意一个对象所属的类
    • 在运行时构造任意一个类的对象
    • 在运行时判断任意一个类所具有的成员变量和方法
    • 在运行时调用任意一个对象的方法
    • 生成动态代理

    获取类的类信息

    //参数需要带上类所在的包名
    Class class = Class.forName("com.javawu.reflect.Person");
    

    获取类中的所有公有构造方法

    Constructor[] constructors = class.getConstructors();
    

    获取类中的所有的共有的和私有的构造方法

    constructors = class.getDeclaredConstructors();
    

    获取某个构造方法

    • 获取不带参的构造方法
    Constructor constructor = class.getConstructor();
    
    • 获取参数为String和int类型的构造方法
    constructor = class.getConstructor(String.class, int.class);
    //传递数组参数
    //Class[] params = {String.class, int.class};
    //class.getConstructor(params);
    
    • 当构造方法为private时,需要设置访问权限
    constructor.setAccessible(true);
    
    • 根据构造方法创建该类的对象
    person = (Person)constructor.newInstance("参数");
    

    获取构造方法名

    constructor.getName();
    

    获取构造方法的参数的Class数组

    Class[] params = constructor.getParemeterTypes();
    

    获取类中的所有public方法(包括父类的方法)

    Method[] methods = class.getMethods();
    

    获取类中所有的方法(不包括父类的方法)

    methods = class.getDeclaredMethods();
    

    获取指定方法名和参数的方法

    //第一个参数:方法的名字 第二个参数:方法的参数的Class
    Method method = class.getMethod("eat", null);
    

    调用方法

    Person person = new Person();
    //第一个参数:执行方法的对象 第二个参数:方法的参数
    method.invoke(person, null);
    

    调用静态方法

    method.invoke(null, 参数)
    

    获取类中的所有public属性

    Field[] fields = class.getFields();
    

    获取类中的所有属性

    fields = class.getDeclaredFields();
    

    获取指定属性名的属性

    Field field = calss.getField("name");
    

    相关文章

      网友评论

          本文标题:Java反射机制

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