java基础 反射调用属性(field),方法(method),构造器(constructor)

    科技2022-07-12  128

    创建一个类(等会调用属性,方法,构造器)

    class Son { private int age; private String name; private void es() { System.out.println("es"); } @Override public String toString() { return "Son{" + "age=" + age + ", name='" + name + '\'' + '}'; } private int getAge() { int testAge = 22; return age; } private void setAge(int age) { this.age = age; } public String getName() { String testName = "试试"; return name; } public void setName(String name) { this.name = name; } public Son() {} }

    属性

    /* *反射,调用指定属性(成员变量) */ @Test public void test2() throws Exception { Class<Son> sonClass = Son.class; Son son = sonClass.newInstance(); // public reflect.Field getDeclaredField(@NonNls @NotNull String name) // 返回一个Field ,它反映此表示的类或接口的指定已声明字段对象Class的对象。 // 的name参数是一个String ,它指定所希望的领域的简单名称。 Field age = sonClass.getDeclaredField("age"); // public void setAccessible(boolean flag) // 可以访问private属性 age.setAccessible(true); // public void set(Object obj, // Object value) // 集由该表示的字段Field上指定对象参数为指定的新值对象。 如果底层字段为基本类型的新值被自动解开。 age.set(son, 100); // public Object get(Object obj) // 返回此表示的该字段的值Field中,指定的对象上。 // 值自动包装在一个对象,如果它有一个基本类型。 System.out.println(age.get(son)); }

    方法

    /* *反射:调用指定方法 */ @Test public void test3() throws Exception { Class<Son> sonClass = Son.class; Son son = sonClass.newInstance(); // public reflect.Method getDeclaredMethod(@NonNls @NotNull String name, // @Nullable Class<?>... parameterTypes) // 返回一个Method对象,它反映此表示的类或接口的指定声明的方法Class对象。 // 的name参数是一个String ,它指定所期望的方法的简单名称, // 并且parameterTypes参数是阵列Class识别方法的形参类型中声明的顺序的对象。 // 名称 - 方法的名称 // parameterTypes - 参数数组(参数的类型) Method getAge = sonClass.getDeclaredMethod("setAge", int.class); getAge.setAccessible(true); System.out.println(getAge); // private int Test10月.Son.getAge() // public Object invoke(Object obj,Object... args) // 调用由此表示的基础方法Method对象,使用指定的参数指定的对象上 // OBJ - 对象底层方法是从调用 // ARGS - 用于方法调用的参数----要调用个数据(类型是上面的int.class) Object invoke = getAge.invoke(son, 100); System.out.println(invoke); // null System.out.println("*********"); // 调用静态的方法es() Class<Son> sonClass1 = Son.class; Son son1 = sonClass1.newInstance(); Method es = sonClass1.getDeclaredMethod("es"); es.setAccessible(true); Object invoke1 = es.invoke(son1); // es }

    构造器

    /* *反射:调用构造器 */ @Test public void test4() throws Exception { Class<Son> sonClass = Son.class; Constructor<Son> declaredConstructor = sonClass.getDeclaredConstructor(); Son son = declaredConstructor.newInstance(); declaredConstructor.setAccessible(true); }
    Processed: 0.010, SQL: 8