黑马程序员-张老师基础加强3-内省
2014-06-06 18:43 黑马程序员* 阅读(377) 评论(0) 编辑 收藏 举报内省:javaBean
JavaBean是一种特殊的Java类,主要用于传递数据信息,这种java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。
JavaBean的属性是根据其中的setter和getter方法来确定的,而不是根据其中的成员变量。如果方法名为setId,中文意思即为设置id,去掉set前缀,剩余部分就是属性名,如果剩余部分的第二个字母是小写的,则把剩余部分的首字母改成小的。
一、setId()的属性名id
二、isLast()的属性名last
三、setCPU的属性名是什么?CPU
四、getUPS的属性名是什么?UPS
PropertyDescriptor类.
常用方法
Method getReadMethod()
获得应该用于读取属性值的方法。 对应get()方法.
Method getWriteMethod()
获得应该用于写入属性值的方法。 对应set()方法.
构造函数 :PropertyDescriptor(String propertyName, Class<?> beanClass)
参数:要查找的属性名,和其所属的类
练习:获取一个类中的Age的值
类 PropertyDescriptor:PropertyDescriptor 描述 Java Bean 通过一对存储器方法导出的一个属性。
public static void main(String[] args) throws Exception { //使用反射的方式获取 。 //1.0 获取Class文件 //2.0 获取method(getAge):注意属性名的大小写转换 //使用反射的方式获取 Class clazz =Class.forName("cn.itcast.InspectorDemo"); InspectorDemo Inspector = (InspectorDemo)clazz.newInstance(); Method method = clazz.getMethod("getAge"); int age = (Integer)method.invoke(Inspector); System.out.println(age); //设置 Method method1 = clazz.getMethod("setName", String.class); method1.invoke(Inspector, "zhangsan"); //获取设置后的值 Method method3 = clazz.getMethod("getName"); String name = (String)method3.invoke(Inspector); System.out.println(name); //2 使用javaBean获取 使用PropertyDescriptor类 String propertyName= "age"; //注意否早方法里面属性名是以小写字母开头。 PropertyDescriptor pd = new PropertyDescriptor(propertyName,cn.itcast.InspectorDemo.class); Method methodgetAge = pd.getReadMethod();//read相当于get()方法。writer()相当于set() InspectorDemo Inspector1 = new InspectorDemo(); Object retval = methodgetAge.invoke(Inspector1); System.out.println(retval); //通过javabean设置 Method methodsetAge =pd.getWriteMethod(); methodsetAge.invoke(Inspector1, 30); }} class InspectorDemo{ private int age=20; private String name="lsisi"; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
注意:使用反射和内省获取成员的区别是:反射需要知道方法的名字和参数,而内省不需要。
Beanutils工具包
Beanttils.getProperty(Object bean,String name)
Beanttils.getProperty(Object bean,String name,String value)
这连个方法接收都是字符串,因为在javaWeb中通过;浏览器传输带数据都是字符串形式
beanutils方法的应用
BeanUtils.setProperty(rf1, "x", "9");//数字用字符串形式表示。
BeanUtils.setProperty(rf1, "birthday.time","111");//可以设置人的头的眼睛的颜色,逐级设置。
map对象和beanutils之间的相互转换。
java1.7 Map map = {map,key,value};
BeanUtils.setProperty(map, key, value)