MyBean Source:
package com.uc.beantest;
import java.io.Serializable;
public class MyBean implements Serializable {
private static final long serialVersionUID = 7681972609642495682L;
private String name;
private int age;
private transient String info;
public static String cinfo;
public MyBean() {
super();
// TODO Auto-generated constructor stub
}
public MyBean(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 String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
builder.append("MyBean [name=");
builder.append(name);
builder.append(", age=");
builder.append(age);
builder.append(", info=");
builder.append(info);
builder.append("]");
builder.append("cinfo = " + cinfo);
return builder.toString();
}
}
利用ObjectOutput实现Bean Object Persistence:
//save
ObjectOutput os = new ObjectOutputStream(
new BufferedOutputStream(
new FileOutputStream("user.ser")));
MyBean user = new MyBean("uc", 25);
user.setInfo("transient field");
MyBean.cinfo = "static field";
//被static transient 修饰的字段不会被序列化
os.writeObject(user);
os.close();
//load
ObjectInput is = new ObjectInputStream(
new BufferedInputStream(
new FileInputStream("user.ser")));
MyBean user = (MyBean)is.readObject();
is.close();
System.out.println(user);
利用XMLEncoder, XMLDecoder实现Bean Object Persistence:
//save
MyBean user = new MyBean("uc", 25);
user.setInfo("transient field");
MyBean.cinfo = "static field";
XMLEncoder encoder = new XMLEncoder(
new BufferedOutputStream(
new FileOutputStream("Beanarchive.xml")));
//static 修饰的字段不会被序列化
encoder.writeObject(user);
encoder.close();
//load
XMLDecoder decoder = new XMLDecoder(
new BufferedInputStream(
new FileInputStream("Beanarchive.xml")));
MyBean user = (MyBean)decoder.readObject();
decoder.close();
System.out.println(user);
Note: JavaBean 命名规范:
Sun 推荐的命名规范
1 ,类名要首字母大写,后面的单词首字母大写
2 ,方法名的第一个单词小写,后面的单词首字母大写
3 ,变量名的第一个单词小写,后面的单词首字母大写
为了使 JavaBean 的属性名和存取方法都符合规范, Sun 在 JSR 文档中规定了属性名和存取方法名的映射规则: ① 属性名对应的存取方法为 get/set 加上首字母大写的属性名,如属性 userName 的存取方法为 setUserName/getUserName。这样属性名和存取方法都符合命名规范。这个规则强制的,如果不符合规则就会出现异常。
但是这里有一个例外规则, Sun 考虑在偶然的情况下会有全大写的属性名,所以又定了一条规则: ②如果属性名的第二个字母是大写,则它的存取方法是 set/get 加上属性原名。
上面两个属性与存取方法的映射规则如下:
① 属性名对应的存取方法为 get/set 加上首字母大写的属性名,如属性 userName 的存取方法为setUserName/getUserName 。
②如果属性名的第二个字母是大写,则它的存取方法是 set/get 加上属性原名。
应用这两个规则时有两个特殊情况需要注意 ,属性名的第一个单词只有一个字母,如 sName ,按照第 2 条映射规则,它的存取方法为 setsName/getsName 。这样存取方法名就与方法名的命名规范有一定的出入,按规范应该是setSName/getSName 。所以最好不要让属性名的第一个单词只有一个字母。另一个特殊情况是起了一个不符合规范的属性名 Sname ,首字母大写后面的小写,这种情况既没有映射规则,也是不允许出现的。
例子:
public void setAge(int age){
this.age = age;
}
public int getAge(){
return this.age;
}
Age-->如果第二个字母是小写的,则把第一个字母变成小的-->age
例如:如果你看到JavaBean中的如下的方法,你应该能判读出他所能操作的JavaBean属性的名称
gettime()--->time
setTime()--->time
getCPU()--->CPU
getsName --->sName
下面用一个表格说明映射规则。
属性名/类型 | getter 方法 | setter 方法 |
xcoordinate/Double | public Double getXcoordinate() | public void setXcoordinate(Double newValue) |
xCoordinate/Double | public Double getxCoordinate() | public void setxCoordinate(Double newValue) |
XCoordinate/Double | public Double getXCoordinate() | public void setXCoordinate(Double newValue) |
Xcoordinate/Double | 不允许 | 不允许 |
student/Boolean | public Boolean getStudent() | public void setStudent(Boolean newValue) |
student/boolean | public boolean getStudent() public boolean isStudent() | public void setStudent(boolean newValue) |