---------------------- android培训、java培训、期待与您交流! ----------------------
javaBean是特殊的java类,这个特殊类里面的方法的名称符合java规范来命名的都可以成为JavaBean。
比如:
class Student{
private String name;
private int 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;
}
}
在这例子里,描述的是学生Person类,类名的头字母为大写
封装字段的方法名为get或者set前缀。这些都是java的书写规范。
虽然类名的头字母也可以是小写的,封装字段的方法名不按照规范的get或set做前缀也不影响程序的取值与赋值
但是这并不符合java的书写规范,且阅读性极差。
我们也可以把javaBean当做是普通的类来进行操作,因为javaBean始终都是个java类,即可new等等平常操作。
但是java类却不可以当成javabean来操作,因为这个java类并不一定是按照java的书写规范来编程的。
比如:
class student{
private String name;
private int age;
public String na(){
return name;
}
public void na(String name){
this.name=name;
}
public int a(){
return age;
}
public void a(int age){
this.age = age;
}
}
这里的person类并不是按照java书写规范来写的,但并不影响程序的运行赋值与取值
如果这时我们当成javabean,用javabean的方式来操作,则无法取到get或set方法。
javaBean的属性是按照方法的名称来辨别的。
这种辨别的方式有个特点:就去去掉前缀后剩下的部分就是javabean的属性名
如以上例子:
getName--Name(去掉前缀后)
getAge--Age(去掉前缀后)
且应用属性名后要对属性名的大小写有所改动,改动属性名是有前提条件的:
如果第二个字母是小写的,则把第一个字母变成小写的,如果第二个属性名是大写的,则把第一个字母变成大写的
getName-->Name(去掉前缀后)-->name
getname-->name(去掉前缀后)-->name
getNAME--NAME(去掉前缀后)-->NAME
这便是javabean改动后的属性名
-----
用内省的方式读取javabean对象的name属性,达到javabean方式的操作。注意:name并不是类中的的成员变量,而是方法去掉前缀后的属性名
public class IntroSpectorTest {
public static void main(String[] args)throws Exception {
Student s = new Student("nimei",20);
BeanInfo bi = Introspector.getBeanInfo(s.getClass()); //把student类转成javabean方式操作
PropertyDescriptor[] pd = bi.getPropertyDescriptors(); //取得所有属性名
Object o = null;
for(PropertyDescriptor p : pd){ //遍历属性名
if(p.getName().equals("name")){ //当遍历到name属性名后
Method mt = p.getReadMethod(); //读取该方法
o = mt.invoke(s); //调用该方法
break;
}
}
System.out.println(o); //打印Student类中的name变量值
}
}
---------------------- android培训、java培训、期待与您交流! ----------------------