java反射获取属性_Java反射学习-3-反射获取属性,⽅法,构
造器
flect;2
3 flect.Constructor;
4 flect.Field;
5 flect.Method;6
importjava.util.Arrays;7 /**
8 * 三 、Class类中要掌握的⽅法:9 * 反射获取具体属性、⽅法、构造器10 *@authorAdministrator11 *12 */
13 public classReflectLearn3 {14
15 public static void main(String[] args) throwsException {16
17 Class> clazz = Class.forName("flect.Person");18 //1.反射获取类的属性值
19 Field field = DeclaredField("address");20 System.out.println("反射获取到的类的属性信息为:" +field);21 //打印结果: 反射获取到的类的属性信息为:private java.lang.Person.address22 //设置属性:⾸先获取对象23
24 //2.反射获取⽅法:必须指定要获取的⽅法名和该⽅法的返回值类型,只靠⽅法名是不⾏的,还需要知道⽅法参数列表中的参数类型
25 /*Method java.DeclaredMethod(String name, Class>... parameterTypes)26 *Class>... 是可变参数,表⽰⼀个元素个数不确定的Class数组*/
27 //Person类的getName()⽅法,没有形参,Class数组写new Class[]{}
28 Method method = DeclaredMethod("getName", newClass[]{});29 System.out.println("获取到的getName()⽅法:"+method);//获取到的getName()⽅法:public java.lang.Name()
30 Method method2 = DeclaredMethod("setName", new Class[]{String.class}); //setName⽅法有⼀个String类型的形参
31 System.out.println("获取到的setName()⽅法:"+method2);//获取到的getName()⽅法:public java.
lang.String
33 //3.反射获取⽆参构造器Constructor> java.DeclaredConstructor(Class>... parameterTypes)
34 Constructor> constructor = DeclaredConstructor(new Class[]{}); //参数为类的类对象数组
35 System.out.println(constructor); //打印Person()
36 Constructor> constructor2 = DeclaredConstructor(new Class[]{Integer.class,String.class,String.class});37 System.out.println(constructor2); //Person(java.lang.Integer,java.lang.String,java.lang.String)38
39 //4.使⽤构造器创建对象: Constructor类的public T newInstance(Object ... initargs)
40 Object object = wInstance(newObject[]{});41 System.out.println(object); //Person [address=null, id=null, name=null]42 //Object object2 = wInstance(new Object[]{1,"李四","北京"});
43 Object object2 = wInstance(1,"李四","北京");44 System.out.println(object2);//Person [address=北京, id=1, name=李四]45
46 //5.设置属性47 //获得类的所有⽅法
48 Method[] methods =DeclaredMethods();49 for(Method m : methods) {50 //获得⽅法的名字;
51 String name = m.getName(); //在这⼀⾏打断点,F6单步调试,查看反射掉调⽤过程
52 if(name.startsWith("set")){53 //获得set字符串后⾯的值
54 String fieldName = name.substring(3);55 //获得属性名
56 fieldName = fieldName.substring(0,1).toLowerCase()+ fieldName.substring(1);57 //获得⽅法对应的属性
58 Field field2 = DeclaredField(fieldName);//注意,不是getField()59 //获得属性对应的具体类型
60 Class> type =Type();61 if(type == Integer.class){62 //通过method对象反射调⽤Person类的⽅法,第⼀个参数是调⽤⽅法的对象,第⼆个参数是⽅法的实参值
63 m.invoke(object2, 2); //相当于person.setId(2)
64 }65 if(type == String.class && "address".equals(fieldName)){66 m.invoke(object2, "南京");67 }68 if(type == String.class && "name".equals(fieldName)){69 m.invoke(object2, "tom");70 }71 }72 }73
74 //6.直接设置属性:field.setAccessible(true)
学习java的学习方法
75 Field field2 = DeclaredField("name");76 field2.setAccessible(true);//让私有的属性可以被访问
77 field2.set(object2, "marry");78 System.out.println(object2);79
80 }81 }

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。