建立实体类 Student 定义String name和 int id, 建立个接口 Entity package com.reflic; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; //反射:1 动态的获得运行时类的信息,类名,接口,属性,方法,构造函数。。。。 // 2 在运行期间动态的创建一个对象 // 3 在运行期间调用对象任意属性和方法 // 4 反射的源头 是 Class,一个Class 的实例对应一个 .class 文件 public class Test { public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException, NoSuchFieldException { //在运行期间生成一个对象 //获得Class 对象的方式3 种 // Class clazz = Student.class; // Class clazz = new Student().getClass() Class clazz = Class.forName("com.reflic.Student"); Constructor constructor= clazz.getConstructor(String.class,int.class); Student student =(Student) constructor.newInstance("zhangsan",10); System.out.println("name:"+student.getName()+",id:"+student.id); //动态的调用对象的属性 //Field fieldName = clazz.getField("name"); Field fieldName = clazz.getDeclaredField("name"); fieldName.setAccessible(true); fieldName.set(student,"lisi"); //student.setName("lisi"); Field fieldId = clazz.getField("id"); fieldId.set(student,20); //student.setId(20); System.out.println("name:"+student.getName()+",id:"+student.id); //动态的调用对象的方法 Method methodSetName = clazz.getMethod("setName", String.class); methodSetName.invoke(student,"wangwu"); //student.setName("wangwu"); Method methodSetId = clazz.getMethod("setId", int.class); methodSetId.invoke(student,30); //student.setId(10); System.out.println("name:"+student.getName()+",id:"+student.id); //在运行期间动态的获得运行时类的信息:类名,接口名称,属性,方法,构造函数。。。。 String name = clazz.getName(); System.out.println("name:"+name); Class[] interfaces = clazz.getInterfaces(); System.out.println("interfaces:"+interfaces[0]); } }
反射机制
最新推荐文章于 2024-08-16 14:06:47 发布