package com.hcj.test;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class Reflect {
public static void main(String[] args) throws Exception{
/*
//无参数
//将类加载到内存里
Class clazz = Class.forName("com.hcj.test.Person");
//获取构造方法
Constructor cons = clazz.getConstructor(null);
//通过该构造方法创造类的实例
Person newInstance = (Person)cons.newInstance(null);
System.out.println(newInstance.name);
//单个参数
//将类加载到内存里
Class clazz = Class.forName("com.hcj.test.Person");
//获取构造方法
Constructor cons = clazz.getConstructor(String.class);
//根据构造方法创造类的实例
Person newInstance = (Person)cons.newInstance("科比");
System.out.println(newInstance.name);
//多个参数
//将类加载到内存里
Class clazz = Class.forName("com.hcj.test.Person");
//获取该类的构造方法
Constructor cons = clazz.getConstructor(String.class, int.class);
//根据构造方法创建类的实例
//Person p = (Person)cons.newInstance("奥尼尔", 22);
Person p = (Person)cons.newInstance(new Object[]{
"奥尼尔",
22
});
System.out.println(p.name + "---" + p.age);
//将类加载到内存里
Class<Person> clazz = (Class<Person>) Class.forName("com.hcj.test.Person");
//获取该类的构造方法
Constructor<Person> cons = clazz.getConstructor(String.class, int.class);
//根据构造方法创建类的实例
Person p = cons.newInstance("奥尼尔", 22);
System.out.println(p.name + "---" + p.age);
Person p = new Person();
//将类加载到内存里
Class clazz = Class.forName("com.hcj.test.Person");
//取得该类的属性
Field field = clazz.getDeclaredField("name");
//暴力发射,访问私有变量
field.setAccessible(true);
field.set(p, "可以啊");
System.out.println(p.getName());
Person p = new Person();
//将类加载到内存里
Class clazz = Class.forName("com.hcj.test.Person");
//取得该类的方法
Method method = clazz.getMethod("play", null);
Object invoke = method.invoke(p, null);
*/
//将类加载到内存里
Class clazz = Class.forName("com.hcj.test.Student");
//获取构造方法
Constructor cons = clazz.getConstructor(null);
//通过该构造方法创造类的实例
Object student = cons.newInstance(null);
//取得该类的所有属性
Field[] declaredFields = clazz.getDeclaredFields();
//暴力发射,访问私有变量
for(Field field : declaredFields){
field.setAccessible(true);
if(field.getType().equals(String.class)){
System.out.println("匹配");
}
}
}
}
对于反射的理解(见注释)和简单例子
最新推荐文章于 2021-02-22 01:21:57 发布