反射机制是Java成为动态语言的一个关键特性,在运行中的Java程序对自身进行检查,或者说“内省”,并能直接操作程序的内部属性,这个机制允许程序在执行时可以通过反射API取得任何一个已知名称的类的信息,并能在执行时改变类的成员变量的内容或执行方法。
反射包:Java.lang.reflect.* Constructor(构造器) Method(方法) Filed(属性)
获得Class对象的三种方法:
(1)通过Class.forName("完整的类名")
如:Class temp=Class.forName("com.xupt.entity.User");
(2)调用某个类的class属性来获取对应的Class对象,
如:Person.class 需要注意的是:需要导包进来
(3)调用对象的getclass()方法。
如:User use=new User(); use.getclass();
获取并查看类中的构造方法:
Constructor[] cons=c1.getDeclaredConstructors(); for(Constructor con:cons){ System.out.println(Arrays.toString(con.getParameterTypes())); }
通过构造器来产生对象:
Constructor con=c1.getConstructor(String.class,int.class); Object obj=con.newInstance("hehe",2);
通过Method来获取类中的所有方法的具体内容:
Method[] methods=c1.getDeclaredMethods(); for(Method method:methods){ System.out.println(method.getReturnType());//方法的返回值信息 System.out.println(method.getName());//方法的名称 System.out.println(Arrays.toString(method.getParameterType()));//方法的参数信息 } //调用相关的方法 Method m=c1.getDeclaredMethod("cc",int.class);//"cc"为方法名,若是无参,则int.class不需要再写 m.setAccessible(true);//可访问private修饰的方法,让修饰符失效。 m.invoke(obj.newInstance(1));
查看类中的所有属性
Field[] fields=c1.getDeclaredFields(); for(Field field:fields){ System.out.println(field.getType()); System.out.println(field.getName()); }
设置属性的话调用相应的setter方法即可
时间: 2024-11-06 03:35:47