反射相关

获取Class类对象

static Class forName(String className);

通过类名调用。是一个静态方法。传入参数是一个完整的包名.类名

例如:

​ Demo1====>com.qfedu.a.Demo1

Class 类名.class

​ 通过制定的类名调取。获取类所对应的属性

Class 类对象.getClass();

​ 通过类对象获取当前类对象Class

package com.qfedu.c_reflect;

public class GetClassObject {
    public static void main(String[] args) throws ClassNotFoundException {
        //例如, String.class的类型是Class<String> 。 如果正在建模的类是未知的,请使用Class<?> 。
        Class<?> cls1 = Class.forName("com.qfedu.c_reflect.Peroson");//一般都使用股这个
        Class<Peroson> cls2 = Peroson.class;
        Class<? extends Peroson> cls3 = new Peroson().getClass();
        System.out.println(cls1 == cls2);
        System.out.println(cls1 == cls3);
        System.out.println(cls2 == cls3);


    }
}

获取构造方法类对象

Constauctors[] getConstructors();

获取当前类中所有非私有化的构造方法。返回值是一个数组类型的数据

Constructors[] getDeclaredConstructors();

获取当前类中所有的构造方法。返回值是一个数组类型的数据

Constructor getConstuctor(Class …initParameterType);

根据指定的参数,返回一个非私有化的构造方法

Constructor getDeclaredConstuctor(Class … initParameterType);

package com.qfedu.c_reflect;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

public class GetConstructor {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
        Class<?> cls1 = Class.forName("com.qfedu.c_reflect.Peroson");
        Constructor<?>[] constructors = cls1.getConstructors();//非私有化的构造方法
        for (Constructor<?> constructor : constructors) {
            System.out.println(constructor);
        }
        System.out.println("=========");
        Constructor<?>[] declaredConstructors = cls1.getDeclaredConstructors();
        for (Constructor<?> declaredConstructor : declaredConstructors) {
            System.out.println(declaredConstructor);
        }
        System.out.println("=========>");
        Constructor<?> constructor = cls1.getConstructor(null);
        System.out.println(constructor);
        System.out.println("========");
        Constructor<?> constructor1 = cls1.getConstructor(int.class);
        System.out.println(constructor1);
        System.out.println("=======");
        Constructor<?> declaredConstructor = cls1.getDeclaredConstructor(int.class, String.class);
        System.out.println(declaredConstructor);
        //实例化对象
        Object obj1 = constructor.newInstance(null);
        System.out.println("obj1"+obj1);
        Object obj2 = constructor1.newInstance(10);
        System.out.println("obj2"+obj2);
        //私有化的不能使用这种方法进行赋值
        Object obj3 = declaredConstructor.newInstance(1, "老邢");
        System.out.println("obj3"+obj3);

    }
}

获取Method类对象

Method[] getMethods();

​ 获取非私有化的成员方法。包括了从父类继承而来可以在子类中使用的成员方法。

Method[] getDeclaredMethods
获取所有的方法。但是不包含从父类继承的方法

Method getMethod(String name, Object … obj);

​ 获取一个方法,通过方法的名字获取的

/*
* Object invoke(Object obj, Object …args); 重中之重
* 参数 obj Person类对象
* 参数 args 执行当方法需要传入实际的参数
* */
//Person person = new Person();
//person.game()
//game====>game()对应好的
//参数 obj 就是 perosn
game.invoke(cls.getConstructor(null).newInstance(null), null);
game1.invoke(cls.getConstructor(null).newInstance(null), “骚磊”);

package com.qfedu.c_reflect;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class GetMethodObject {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
        Class<?> cls = Class.forName("com.qfedu.c_reflect.Peroson");
        Method[] methods = cls.getMethods();
        for (Method method : methods) {
            System.out.println(method);
        }
        System.out.println("========");
        //getDeclaredMethods  获取所有的方法。但是不包含从父类继承的方法
        Method[] declaredMethods = cls.getDeclaredMethods();
        for (Method declaredMethod : declaredMethods) {

            System.out.println(declaredMethod);
        }
        System.out.println("===========>");
        //获取指定某一个方法
        //Method getMethod(String methodName,Class....initParameterType)
        Method game = cls.getMethod("game", null);
        System.out.println(game);
        System.out.println("=========>");
        Method game1 = cls.getMethod("game", String.class);
        System.out.println(game1);
        System.out.println("========");
        //获取私有的方法
        Method testPrivate = cls.getDeclaredMethod("testPrivate", null);
        System.out.println(testPrivate);
        Method testPrivate1 = cls.getDeclaredMethod("testPrivate", String.class);
        System.out.println(testPrivate1);

        /*
        * Object invoke(Object obj, Object ....args);  重中之重
        *               参数 obj  Person类对象
        *               参数 args 执行当方法需要传入实际的参数
        * */
        //Person person   =  new  Person();
        //person.game()
        //game====>game()对应好的
        //参数 obj 就是  perosn
        game.invoke(cls.getConstructor(null).newInstance(null), null);
        game1.invoke(cls.getConstructor(null).newInstance(null), "骚磊");
    }
}

获取Filed类对象

Field[] getFields();

​ 获取当前类内所有非私有化的成员变量的类对象。返回Field一个数组

Field[] getDeclaredFields();

​ 获取当前类内所有的成员变量,包含私有的变量。

package com.qfedu.c_reflect;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;

public class GetFieldObject {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {

        Class<?> cls = Class.forName("com.qfedu.c_reflect.Peroson");
        Field[] fields = cls.getFields();
        for (Field field : fields) {
            System.out.println(field);
        }
        System.out.println("===========");
        Field[] declaredFields = cls.getDeclaredFields();
        for (Field declaredField : declaredFields) {

            System.out.println(declaredField);
        }
        System.out.println("======>");
        //这个方法根据属性的名字只能获取非私有化的一个属性
        Field test = cls.getField("test");
        System.out.println(test);
        //获取私有化的成员属性
        Field id = cls.getDeclaredField("id");
        System.out.println(id);

        Field name = cls.getDeclaredField("name");
        System.out.println(name);


        Peroson p = (Peroson)cls.getConstructor(null).newInstance(null);


        //g给与暴力反射操作权限
        id.setAccessible(true);//默认没有带private,相当于把private给删除了
        name.setAccessible(true);
        id.set(p, 20);
        name.set(p, "帅栋");
        test.set(p, 100);
        System.out.println(p);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值