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();
}
}
}