Java反射-操作Field、Method、Constructor

1,Field、Method、Constructor中的反射数据

1)Field类

Java反射-操作Field、Method、Constructor_第1张图片
image.png

2)Method类
Java反射-操作Field、Method、Constructor_第2张图片
image.png

3)Constructor类
Java反射-操作Field、Method、Constructor_第3张图片
image.png

4)The AccessibleObject class is the base class for Field, Method and
Constructor objects.
Java反射-操作Field、Method、Constructor_第4张图片
image.png

2,打印所有成员变量、方法、构造器

public static void main(String[] args) {
    Field[] fields = String.class.getDeclaredFields();
    for(Field field : fields){
      field.setAccessible(true);
      System.out.println(Modifier.toString(field.getModifiers()) + " " + field.getType().getSimpleName() + " " + field.getName() + ";");
    }

    System.out.println("----------------------------");

    Method[] methods = String.class.getDeclaredMethods();
    for(Method method : methods){
      method.setAccessible(true);
      String temp = Modifier.toString(method.getModifiers()) + " " + method.getReturnType() + " "
              + method.getName() + "(";
      for(Class clazz : method.getParameterTypes()){
        temp += clazz.getSimpleName() + ",";
      }
      temp = temp.substring(0, (temp.lastIndexOf(",") == -1)?temp.length():temp.lastIndexOf(","));
      temp += ")";
      System.out.println(temp);
    }

    System.out.println("----------------------------");

    Constructor[] constructors = String.class.getDeclaredConstructors();
    for(Constructor constructor : constructors){
      constructor.setAccessible(true);
      String temp = Modifier.toString(constructor.getModifiers()) + " " + constructor.getName() + "(";
      for(Class clazz : constructor.getParameterTypes()){
        temp += clazz.getSimpleName() + ", ";
      }
      temp = temp.substring(0, (temp.lastIndexOf(",") == -1)?temp.length():temp.lastIndexOf(","));
      temp += ")";
      System.out.println(temp);
    }
  }

3,Field、Method、Constructor上

1)是否有指定注解(自定义注解的处理)
2)modifier判断

public static void main(String[] args) throws Exception {
        Method method = Class.class.getDeclaredMethod("newInstance", null);
        if(method.isAnnotationPresent(CallerSensitive.class)){
            System.out.println(method.getDeclaringClass());
            System.out.println(Modifier.isStatic(method.getModifiers()));
            System.out.println(Modifier.isPublic(method.getModifiers()));
            System.out.println(Modifier.isPrivate(method.getModifiers()));
        }

        Field field = Class.class.getDeclaredField("name");
        if(!field.isAnnotationPresent(CallerSensitive.class)){
            System.out.println(field.getName());
            System.out.println(Modifier.isStatic(field.getModifiers()));
            System.out.println(Modifier.isPublic(field.getModifiers()));
            System.out.println(Modifier.isPrivate(field.getModifiers()));
        }

        Constructor constructor = Class.class.getDeclaredConstructor(ClassLoader.class);
        if(!constructor.isAnnotationPresent(CallerSensitive.class)){
            System.out.println(constructor.getDeclaringClass());
            System.out.println(Modifier.isStatic(constructor.getModifiers()));
            System.out.println(Modifier.isPublic(constructor.getModifiers()));
            System.out.println(Modifier.isPrivate(constructor.getModifiers()));
        }
    }

你可能感兴趣的:(Java反射-操作Field、Method、Constructor)