反射

mac2025-10-12  9

只知道类名,就可以得到类的属性,构造方法,方法,还可以创建对象

在配置文件中说明类名

增强可扩展性

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 { getField(); getConstructor(); getMethod(); } private static void getMethod() throws Exception { String classname = "reclect.Person"; Class clazz = Class.forName(classname);//拿到字节码文件对象 String methodName = "show"; Method method = clazz.getMethod(methodName,String.class,int.class); Person p = (Person)clazz.newInstance(); method.invoke(p,"bb",20); } private static void getConstructor() throws Exception { String classname = "reclect.Person"; Class clazz = Class.forName(classname);//拿到字节码文件对象 //获取指定构造器 Constructor con = clazz.getConstructor(String.class,int.class); //通过构造器对象初始化类对象 Person p = (Person)con.newInstance("aa",23); System.out.println(p); } private static void getField() throws Exception { String classname = "reclect.Person"; Class clazz = Class.forName(classname); String fieldName = "name"; //getXXX:获取的都是类中共有的成员 //getDeclaredXXX:获取本类中已有的成员 Field field = clazz.getDeclaredField(fieldName);//获取已经声明过的字段,不论权限 Person p = (Person)clazz.newInstance();//获取对象 field.setAccessible(true);//忽略权限 field.set(p,"xx"); System.out.println(p); } }
最新回复(0)