Java反射机制由哪些类实现?

  • 运行环境:

  JDK8 + IntelliJ IDEA 2018.3 


  • 源码: 

    package com.ChenJiangT.Demo2;
    
    import java.lang.reflect.Constructor;
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    import java.util.Arrays;
    
    public class Demo2 {
        public static void main(String[] args) {
           /* Field 类:代表类的成员变量(成员变量也称为类的属性)。
    
            Method类:代表类的方法。
    
            Modifier类:代表修饰符。
    
            Constructor 类:代表类的构造方法。*/
            Student student = new Student();
            Class claStu=student.getClass();
    
            Field cla1=null;
            try {
                cla1=claStu.getDeclaredField("name");
            } catch (NoSuchFieldException e) {
                e.printStackTrace();
            }
            System.out.println(cla1);
    
             Field[] cla2=claStu.getDeclaredFields();
            System.out.println(Arrays.toString(cla2));
    
            System.out.println("********************************************************************************************");
    
            //Method类:
            Method clazMe=null;
            try {
                 clazMe=claStu.getMethod("aa",String.class);//查找方法名是getName 并且c
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            }
            System.out.println(clazMe);
    
            Method[] clazMe2=claStu.getMethods(); //查找此类的所有公共的方法  包含父类的继承来的方法
            System.out.println(Arrays.toString(clazMe2));
    
            Method[] clazMe4 = claStu.getDeclaredMethods();//查找此类的所有的方法  不包含父类的继承来的方法
            System.out.println(Arrays.toString(clazMe4));
    
            System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
    
            //Modifier类  getModifiers
            int claMod=claStu.getModifiers();
            System.out.println(claMod);
    
    
            //Constructor 类:代表类的构造方法   getConstructor  getConstructors  getDeclaredConstructors
            Constructor claCon1=null;
            try {
                 claCon1 = claStu.getConstructor(String.class);//查找参数是String 的构造方法
            } catch (NoSuchMethodException e) {
                e.printStackTrace();
            }
            System.out.println(claCon1);
            Constructor[] claCon2 = claStu.getConstructors();//查找此类的所有的构造方法
            System.out.println(Arrays.toString(claCon2));
    
            Constructor[] claCon3 = claStu.getDeclaredConstructors();//查找此类的所有的声明的构造方法
            System.out.println(Arrays.toString(claCon3));
    
        }
    }
  • 效果图:

 

总结:

    在JDK中,主要由以下类来实现Java反射机制,这些类都位于java.lang.reflect包中:

      1).Class类:代表一个类。

      2).Field 类:代表类的成员变量(成员变量也称为类的属性)。

      3).Method类:代表类的方法。

      4).Modifier类:代表修饰符。

      5).lConstructor 类:代表类的构造方法。

      6).Array类:提供了动态创建数组,以及访问数组的元素的静态方法。(以上文档没有Array的示例 ,明天补充)

原文地址:https://www.cnblogs.com/CjtBlog/p/13555508.html