java 反射

package com.howhy.demo;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.SQLOutput;
import java.util.*;
import java.util.function.Consumer;
import java.util.function.Supplier;
import java.util.stream.Stream;

public class Demo1 {
    public static void main(String[] args) {
        Class person = Person.class;
        Field[] fields = person.getFields();//获取public修饰的成员变量
        for (Field f : fields) {
            System.out.println(f);
        }
        Field[] declaredFields = person.getDeclaredFields();//获取所有的成员变量与修饰符无关
        for (Field f : declaredFields) {
            System.out.println(f);
        }
        try {
            System.out.println(person.getField("name"));
            Field ff = person.getDeclaredField("name");//  Field ff = person.getDeclaredField("name") ;       ff.setAccessible(true); //private 若不加此句会报错无法get set
            Person p=new Person();
            Object obj=ff.get(p);//get方法
            ff.set(p,"eeee");//set方法
            System.out.println(ff.get(p));
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        }
        Object aa = null;
        try {
            Constructor constructor = person.getConstructor(String.class, Integer.class);
            aa = constructor.newInstance("aa", 23);
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
        System.out.println(aa);
        Method say = null;
        try {
            say = person.getMethod("say");
            Person ccc = new Person("ccc", 23);
            say.invoke(ccc);
            say = person.getMethod("say",String.class);
            say.invoke(ccc,"44444");
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
    }
}

 

posted @ 2021-08-31 17:02  howhy  阅读(19)  评论(0编辑  收藏  举报