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) |