java基础---反射基本方法使用

    技术2022-07-10  138

    获取Class 对象

    方式

    Class.forName()类名.class对象名.getClass()

    代码如下:

    Class<?> aClass = Class.forName("com.advanced.dome.util.Car"); System.out.println(Car.class); Car car = new Car(); Class<? extends Car> aClazz = car.getClass(); System.out.println(aClass); System.out.println(aClass); System.out.println(car.getClass() == aClass);

    Class 常用方法

    String getName() 获取全类名ClassLoader getClassLoader() 返回类的类加载器。类<?>[] getInterfaces() 确定由该对象表示的类或接口实现的接口。Package getPackage() 获取此类的包。

    获取对象–字段

    定义class对象

    Car car = new Car(); Class<? extends Car> aClass = car.getClass();

    获取对象的全部public修饰的对象

    Field[] fields = aClass.getFields(); System.out.println(Arrays.toString(fields));

    获取指定名称 由public修饰的对象

    Field name = aClass.getField("name"); System.out.println(name);

    获取对象的全部对象,不考虑修饰符

    Field[] declaredFields = aClass.getDeclaredFields(); System.out.println(Arrays.toString(declaredFields));

    通过名称获取对象不考虑修饰符

    Field length = aClass.getDeclaredField("length"); System.out.println(length);

    为属性赋值,如果该属性为私有的则可以通过暴力破解 即定义setAccessible(true)

    Field name = aClass.getField("name"); System.out.println(name); name.set(car, "ceshi"); System.out.println(car);

    获取构造方法

    Car car = new Car(); Class<? extends Car> aClass = car.getClass(); Constructor<?>[] constructors = aClass.getConstructors(); //通过传入参数类型寻找构造参数 Constructor<? extends Car> constructor = aClass.getConstructor(String.class); System.out.println(constructor); System.out.println(Arrays.toString(constructors));

    获取成员变量

    Car car = new Car(); Class<? extends Car> aClass = car.getClass(); //获取全部对象 Method[] methods = aClass.getMethods(); System.out.println(Arrays.toString(methods)); //通过名称获取成员变量 Method getLength = aClass.getMethod("getLength"); System.out.println(getLength); Field f = aClass.getDeclaredField("length"); //暴力破解反射 f.setAccessible(true); f.set(car,"123"); //调用成员变量 // 在具有指定参数的方法对象上调用此方法对象表示的底层方法。 //如果底层方法是静态的,则指定的obj参数将被忽略。 它可能为null。 //如果底层方法所需的形式参数的数量为0,则提供的args数组的长度为0或为空。 Object invoke = getLength.invoke(car, null); System.out.println(invoke);

    示例代码已经上传至GitHub

    Processed: 0.012, SQL: 9