通过反射获取方法,属性
2017-03-18 10:22
267 查看
文章主旨,测试反射获取方法,属性
先写个测试的对象
剩下的自己测测,多练多测
不足之处,多多指导
先写个测试的对象
package com.test; public class Stu{ private String name = "aabbcc"; private String address = "abcdefg"; public String ph = "black"; public String ps = "fff" ; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getPh() { return ph; } public void setPh(String ph) { this.ph = ph; } public String getPs() { return ps; } public void setPs(String ps) { this.ps = ps; } public Stu(String name, String address, String ph, String ps) { super(); this.name = name; this.address = address; this.ph = ph; this.ps = ps; } public Stu() { super(); } public void m(){ } private void n(){ } }
package com.test; import java.lang.reflect.Field; public class TestClassMain { public static void main(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, ClassNotFoundException, IllegalAccessException { Stu st = new Stu(); Field fph = st.getClass().getField("ph"); //public java.lang.String com.test.Stu.ph //获取对象的公开属性 System.out.println(fph); // 获取对象的公开属性的值 System.out.println(fph.get(st)); //black // 有人说了,不知道人家的属性名字,看你怎么获取属性,和值,通过下面方法,就可以实现获取对象的属性和值 // 通过getFields() 可以获取所有的公开属性 Field[] fields = st.getClass().getFields(); for (Field field : fields) { System.out.println(field.get(st)); } // 通过getDeclaredFields() 获取所有的公开和私有的属性 Field[] fields2 = st.getClass().getDeclaredFields(); for (Field field : fields2) { field.setAccessible(true); System.out.println(field.get(st)); } // 获取对象的构造方法 , 只能获取公开的 Constructor<?>[] constructors = st.getClass().getConstructors(); for (Constructor<?> constructor : constructors) { System.out.println(constructor); } // 可以获取全部的构造方法 Constructor<?>[] dec = st.getClass().getDeclaredConstructors(); for (Constructor<?> d : dec) { d.setAccessible(true); System.out.println(d); } // 公共方法和私有方法 Method[] mes = st.getClass().getDeclaredMethods(); for (Method met : mes) { System.out.println(met); } //传对象 changeValue(st); }// 用来修改对象值 public static void changeValue(Object obj) throws IllegalArgumentException, IllegalAccessException{ Field[] fields = obj.getClass().getDeclaredFields(); for (Field field : fields) { if(field.getType() == String.class){ field.setAccessible(true); String oldValue = (String)field.get(obj); String newVale = oldValue.replace('b','A'); field.set(obj, newVale); System.out.println(field.get(obj)); } } } }
剩下的自己测测,多练多测
不足之处,多多指导
相关文章推荐
- java再复习——通过反射获取类的名字,属性,方法,构造器
- 通过反射获取街道这个类的所有属性、所有方法信息
- 通过反射获取方法,属性
- 通过反射获取类属性字段 以及 调用类方法
- java 通过反射获取调用类方法及属性
- java 通过反射获取调用类方法及属性
- 通过反射获取类的所有属性和方法
- 通过反射获取超类属性和方法
- Java---通过属性名反射获取get和set方法
- 通过反射来获取私有的属性,方法~~
- 通过反射获取类的所有属性和方法
- 反射(2)—通过反射获取属性方法等信息
- 通过反射获取构造方法,属性,方法信息
- 6.通过反射动态创建对象,获取属性,获取方法
- java 通过反射获取调用类方法及属性
- 用反射来在方法里获取泛型对象的属性
- C#通过属性名称获取(读取)属性值的方法
- android 自定义属性通过反射关联组件与方法
- java 利用反射机制,获取实体所有属性和方法,并对属性赋值
- Java 编程下通过反射获取一个类中的方法名和对应参数名