import org.w3c.dom.ls.LSOutput;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Arrays;
public class MyReflection {
public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, InstantiationException {
//获取类对象的三种方式
Class cls = Class.forName("Reflection.Person");
System.out.println(cls);
Class personClass = Person.class;
System.out.println(personClass);
Person p=new Person();
Class aClass = p.getClass();
System.out.println(aClass);
//获取public修饰的成员变量
Field[] fields = personClass.getFields();
Arrays.stream(fields).forEach(s-> System.out.println(s));
Field a = personClass.getField("a");
//赋值
a.set(p,"name");
System.out.println(a.get(p));
System.out.println("====================");
//获取全部权限的成员变量
Field[] declaredFields = personClass.getDeclaredFields();
Arrays.stream(declaredFields).forEach(s-> System.out.println(s));
System.out.println("========================");
Field name = personClass.getDeclaredField("name");
//加强反射将private修饰的成员变量进行赋值操作
name.setAccessible(true);
name.set(p,"lx");
System.out.println(name.get(p));
//获取构造方法
System.out.println("========================");
Constructor[] constructors = personClass.getConstructors();
System.out.println(constructors);
//获取构造方法
Constructor constructor = personClass.getConstructor(int.class, String.class);
//使用构造方法
System.out.println("====================");
Object instance = constructor.newInstance(28, "张三");
System.out.println(instance);
personClass.newInstance();
// System.out.println(p);
System.out.println("=================");
Method declaredMethod = personClass.getDeclaredMethod("eat");
declaredMethod.invoke(p);
Method sleep = personClass.getDeclaredMethod("sleep", String.class);
sleep.setAccessible(true);
sleep.invoke(p,"lx");
}
}``
Person类:
public class Person {
private int age;
private String name;
public String a;
protected String b;
public String c;
private String d;
public int getAge() {
return age;
}
public String getName() {
return name;
}
public void setAge(int age) {
this.age = age;
}
public void setName(String name) {
this.name = name;
}
public Person(int age, String name) {
this.age = age;
this.name = name;
}
public Person() {
}
public void eat(){
System.out.println("eat");
}
private void sleep(String name){
System.out.println(name+"睡觉");
}
@Override
public String toString() {
return "Reflection.MyReflection.Person{" +
"age=" + age +
", name='" + name + '\'' +
", a='" + a + '\'' +
", b='" + b + '\'' +
", c='" + c + '\'' +
", d='" + d + '\'' +
'}';
}
}