黑马程序员_<<基础加强--javaBean>>
来源:互联网 发布:mac不充电 编辑:程序博客网 时间:2024/05/18 02:19
--------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流! --------------------
1. javaBean
1.概述
使用的是get和set来表示,要是使用javaBean类来操作类,那么其属性必须符合其命名规则。
命名规则:如果属性名第一个字符是小写,则把其变成大写
例如:ab getAb(){};
如果第一个字母是大写,则后面的都不变
例如:Abc getAbc();
用工具类的话,可以自动生成
使用起来:简单,方便
2.PropertyDescriptor
import java.beans.IntrospectionException;import java.beans.PropertyDescriptor;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method; /*符合javaBean 命名规则的类*/class BeanDemo{ private String name; public BeanDemo(String name) { super(); this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } }public class javaBeanDemo { public static void main(String[] args) throws Exception{ BeanDemo bd=new BeanDemo("zhangsan"); /** * 使用PropertyDescriptor来导出属性或者写入属性值 * public MethodgetReadMethod()读取属性值 * Method getWriteMethod()获得应该用于写入属性值 */ String propertyName="name";//表示的属性名称 /*读取*/ Object value=getProperty(bd, propertyName); System.out.println("name="+value); /*写入*/ String newName="lisi"; setProperty(bd, propertyName, newName); value=getProperty(bd,propertyName); System.out.println("name="+value); }/*设置属性*/ private static void setProperty(Object bd, String propertyName, String newName) throws IntrospectionException, IllegalAccessException, InvocationTargetException { PropertyDescriptor pd=new PropertyDescriptor(propertyName, bd.getClass()); Method SetName=pd.getWriteMethod();//获得写入的方法 SetName.invoke(bd,newName);//调用方法,赋值新的 }/*获得属性*/ private static Object getProperty(Object bd, String propertyName) throws IntrospectionException, IllegalAccessException, InvocationTargetException { PropertyDescriptor pd=new PropertyDescriptor(propertyName,bd.getClass()); Method GetName=pd.getReadMethod();//读取获得的属性 Objectvalue=GetName.invoke(bd);//调用此方法,获取值 return value; }} 结果:name=zhangsanname=lisi
3.BeanInfo
举一个例子,获取值,利用循环。
public class javaBeanDemo { public static void main(String[] args) throws Exception { BeanDemo bd = new BeanDemo("zhangsan"); BeanInfo bi = Introspector.getBeanInfo(bd.getClass()); PropertyDescriptor[] pds=bi.getPropertyDescriptors();//获得PropertyDescriptor数组 for(PropertyDescriptor pd:pds){ System.out.println(pd.getName()+"="+pd.getReadMethod().invoke(bd)); } }}
4.BeanUtil
要是使用此类,必须导入两个jar包,
commons-beanutils.jar和commons-logging.jar,
BeanUtils里面静态方法,操作javaBean类的话,都是当作String类型操作的,对其赋值或者是取值都是当作String 类型操作的。
importorg.apache.commons.beanutils.BeanUtils;import org.apache.commons.beanutils.PropertyUtils; public class Person { private String name; private int age; public Person(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } public class BeanUtilDemo { public static void main(String[] args) throws Exception { Person1 per = new Person1(23, "zhansgan"); System.out.println("使用BeanUtils操作--------------------------------"); BeanUtils.setProperty(per, "age", 20);// 设置属性的值 String value = BeanUtils.getProperty(per, "age");// 获取属性的值 System.out.println(value); System.out.println("操作类型:" + BeanUtils.getProperty(per, "age").getClass().getName()); } }结果:使用BeanUtils操作--------------------------------20操作类型:java.lang.String
从结果可以看出:BeanUtils来操作类,不管属性是什么类型的,都是以String类型来操作的,
Person类和测试类一定要分来写,不要写在提个文件中
5.PropertyUtils
就是把BeanUtils改成PropertyUtils即可。
PropertyUtils操作的什么类型,赋值和获得的值的类型都一样。
public class BeanUtilDemo { public static void main(String[]args) throws Exception { System.out.println("使用property操作--------------------------------"); PropertyUtils.setProperty(per, "name", "李四"); System.out.println(PropertyUtils.getProperty(per,"name")); System.out.println("操作name的类型是:" + PropertyUtils.getProperty(per, "name").getClass().getName()); PropertyUtils.setProperty(per, "age", 25); System.out.println(PropertyUtils.getProperty(per,"age")); System.out.println("操作age的类型是:" + PropertyUtils.getProperty(per, "age").getClass().getName());}} 结果: 使用property操作--------------------------------李四操作name的类型是:java.lang.String25操作age的类型是:java.lang.Integer
PropertyUtils类来操作的根据属性的类型而定,如果属性的类型是String类型,那么就一String类型来操作,如果属性是int类型,那么就以Integer类型来操作。
综合起来操作:
public class Person {private String name;private int age;public Person(String name, int age) {super();this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}import java.beans.BeanInfo;import java.beans.Introspector;import java.beans.PropertyDescriptor;import java.lang.reflect.Method;import org.apache.commons.beanutils.BeanUtils;import org.apache.commons.beanutils.PropertyUtils;public class BeanText {public static void main(String[] args) throws Exception {Person per = new Person("zhansgan", 23);System.out.println("使用BeanUtils操作--------------------------------");BeanUtils.setProperty(per, "age", 20);//设置属性的值String value = BeanUtils.getProperty(per, "age");//获取属性的值System.out.println(value);System.out.println("操作类型:"+BeanUtils.getProperty(per, "age").getClass().getName());System.out.println("使用property操作--------------------------------");PropertyUtils.setProperty(per, "name", "李四");System.out.println(PropertyUtils.getProperty(per, "name"));System.out.println("操作name的类型是:"+PropertyUtils.getProperty(per, "name").getClass().getName());PropertyUtils.setProperty(per, "age", 25);System.out.println(PropertyUtils.getProperty(per, "age"));System.out.println("操作age的类型是:"+PropertyUtils.getProperty(per, "age").getClass().getName());}}结果:使用BeanUtils操作--------------------------------20操作类型:java.lang.String使用property操作--------------------------------李四操作name的类型是:java.lang.String25操作age的类型是:java.lang.Integer
--------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流! --------------------
- 黑马程序员_<<基础加强--javaBean>>
- 黑马程序员_基础加强之JavaBean
- 黑马程序员_基础加强_内省&JavaBean&Beanutils工具
- 黑马程序员_基础加强(4) 内省 & javaBean
- 黑马程序员_基础加强(内省 JavaBean)
- 《黑马程序员》基础加强---JavaBean
- 黑马程序员_基础加强
- 黑马程序员_基础加强
- 黑马程序员_java基础加强之JavaBean
- 黑马程序员—Java基础加强(JavaBean)
- 黑马程序员--基础加强(内省-javabean)
- 黑马程序员_基础加强_枚举
- 黑马程序员_基础加强_反射
- 黑马程序员_基础加强_注解
- 黑马程序员_基础加强_代理
- 黑马程序员_基础加强_枚举
- 黑马程序员_基础加强_注解
- 黑马程序员_基础加强_反射
- 周鸿祎顶多只是个守门员!
- Runtime error R6034 attempt to load C runtime library incorrenctly
- 我希望在软件开发生涯初期就知道的 4 件事
- GridView那点事之【鼠标划过该行实现高亮颜色显示】
- 云盘上演空间战 除了容量还有什么可拼?
- 黑马程序员_<<基础加强--javaBean>>
- Understand The SerialVersionUID
- Rewrite规则怎么写之Apache篇
- JDBC获取新增记录的自增主键
- (DS1.4.)poj 1552 Doubles(测试组数和每组测试用例的个数不定)
- 无法启动android模拟器
- 希望和目标
- 画图
- 堆排序算法