C/C++教程

反射-class对象功能概述和获取Field功能

本文主要是介绍反射-class对象功能概述和获取Field功能,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

class对象功能概述

获取功能:

1.获取成员变量们

  • Fileld[] getFields()
  • Fileld getFileld(String name).

 

  • Fileld[] getDeclaredFilds()
  • Filed getDeclaredField(String name)

2.获取构造方法们

  • Constructor<?>[] getConstructors()
  • Constructor<T> getConstructor(类<?>... parameterTypes)

 

  • Constructor<T> getDeclaredConstrutor(类<?>... parameterTypes)
  • Constructor<?> getDeclaredConstructors()

3.获取成员方法们

  • Method[] getMethods()
  • Method getMethod(String name,类<?>... parameterTypes)

 

  • Method[] getDeclaredMethods()
  • Method getDeckaredMethod(String name,类<?>... paramterTypes)

4.获取类名

  •  String getName()

获取Field功能

 获取Field

  • Fileld[] getFields() 获取所有public修饰的成员变量 注意:如果不是public都不会获取 必须手动添加
  • Fileld getFileld(String name).获取指定public修饰的成员变量 注意:如果不是public都不会获取 必须手动添加

 

  • Fileld[] getDeclaredFilds()获取所有成员变量
  • Filed getDeclaredField(String name)获取指定成员变量

 

  • a.setAccessible(boolean flay);忽略修饰符的安全检查 俗称暴力反射

代码:

public class ReflectDemo02 {

    public static void main(String[] args) throws Exception {
        //1.获取Person的Class对象
        Class personClass = Person.class;
        /*
        Fileld[] getFields() 获取所有public修饰的成员变量 注意:如果不是public都不会获取 必须手动添加
        Fileld getFileld(String name).获取指定public修饰的成员变量 注意:如果不是public都不会获取 必须手动添加
         */
        //Fileld[] getFields()获取所有public修饰的成员变量 注意:如果不是public都不会获取 必须手动添加
        Field[] fields = personClass.getFields();
        for (Field field : fields) {
            System.out.println(field);
        }

        System.out.println("---------------------");
        //Fileld getFileld(String name).获取指定public修饰的成员变量 注意:如果不是public都不会获取 必须手动添加
        Field age = personClass.getField("age");
        //获取成员变量age的值
        Person p = new Person();
        Object o = age.get(p);
        System.out.println(o);
        //设置成员变量age的值
        age.set(p, 10);
        //获取成员变量age的值
        o = age.get(p);
        System.out.println(o);

        System.out.println("--------------------------");
        /*
        Fileld[] getDeclaredFilds()
        Filed getDeclaredField(String name)
         */
        //Fileld[] getDeclaredFilds()
        Field[] fields1 = personClass.getDeclaredFields();
        for (Field field : fields1) {
            System.out.println(field);
        }
        System.out.println("----------------------------");
        //Filed getDeclaredField(String name)
        Field a = personClass.getDeclaredField("a");
        //在获取不是public的成员变量时 需要忽略修饰符的安全检查
        a.setAccessible(true);//这种我们称为 暴力反射
        //获取成员变量age的值
        Object o1 = a.get(p);
        System.out.println(o1);


    }

运行结果:

这篇关于反射-class对象功能概述和获取Field功能的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!