反射

1.三种方式 Class获取对象
    1:(最好用) 使用类的 Class属性来获取该类对应的对象举例: Student.class将会返回类对应的对象
    Class c = Student.class;
    2:调用对象的getclass()方法,返回该对象所属类对应的 class对象
该方法是 object类中的方法,所有的java对象都可以调用该方法
    Class s = new Student();
    Class c = s.getClass();
    3:(灵活性最高) 使用Cass类中的静 态方法( String className),该方法需要传入字符串参数,该字符串参数的值是某个类的全路径
    Class c = Class.forName("com.Student");

2.反射获取构造方法
(1)Class类中用于获取构造方法的方法
         Constructor[]getConstructors():
            返回所有公共构造方法对象的数组
         Constructor[] getDeclaredConstructors():
            返回所有构造方法对象的数组
         Constructor getConstructor(Class... parameterTypes):
            返回单个公共构造方法对象
         Constructor getDeclaredConstructor(Class... parameterTypes):
            返回单个构造方法对象
(2)Constructor类中用于创建对象的方法
         T newInstance(Object.. initargs):
            根据指定的构造方法创建对象
         暴力反射(初始化私有对象):con.setAccessible(true)
注:参数为要获取的构造方法的参数的个数和数据类型对应的字节码文件对象
    原理:
        1> 把字符串路径传到 forName() 方法中,然后获取到其字节码文件c,
        Class c = Class.forName("com.Student");
        2> 通过c得到单个的构造方法对象con,
        Constructor con = c.getConstructor(Class... parameterTypes);
        3> 然后构造方法对象的newInstance() 方法创建对象
        Object obj = con.newInstance(Object... initargs);

例: Constructdr con = c.getConstructor(String.class, int.class);
        //Constructor getConstructor (Class... parameterTypes)
注:传入Class类型为class字节码型,基本数据类型也可以通过 .class得到对应的Class类型

3.反射获取成员变量并使用
     Class类中用于获取成员变量的方法:
        Field[] getFields(): 返回所有公共成员变量对象的数组
        Field[] getDeclared Fields(): 返回所有成员变量对象的数组
        Field getField(String name):返回单个公共成员变量对象
        Field getDeclaredField(String name): 返回单个成员变量对象
    Field类中用于给成员变量赋值的方法:
        void set(Object obj, Object value):给obj对象的成员变量赋值为value
     // Field提供有关类或接口的单个字段的信息和动态访问

    例:    Field nameField = c.getDeclared("name");
            成员变量的暴力反射: nameField.setAccessible(true);
            赋值: nameField.set(obj,30);

4.反射获取成员方法并使用
     (1) class类中用于获取成员方法的方法
        Method getMethods():返回所有公共成员方法对象的数组,包括继承的
        Method getDeclaredMethods():返回所有成员方法对象的数组不包括继承的
        Method getMethod(String name, Class... parameterTypes):返回单个公共成员方法对象
        Method getDeclaredMethod(String name, Class... parameterTypes):返回单个成员方法对象
    (2) Method类中用于调用成员方法的方法
        Object invoke(Object obj, Object..args):调用obj对象的成员方法,参数是args返回值是 Object类型

你可能感兴趣的:(java,反射)