Java核心技术卷II(第8版) – 读书笔记 – 第8章

惯例跳过GUI部分,回头有空应该看一下第7章,讲了不少绘图的东西,可能还有点用。

第8章主要是JavaBean。

1、JavaBean的官方定义:一个Bean就是一个可重用的软件构建,并且能够在开发工具中可视化地操作(如NetBeans)。我凹凸了,原来JavaBean的初衷是为了方便GUI的可视化编程开发。。

2、其实也很好理解,就是希望一个JavaBean可以像VB那样具有不同的属性,可以直接在IDE上点点就可以完成对它的配置,而不需要swing那样整屏整屏的刷代码。

3、对于JavaBean来说,并没有一个通用的“父类”可以拿来继承。开发工具不会根据某个类的父类来“了解”JavaBean,而是根据精巧的命名,因此,JavaBean的命名必须支持某种规范。

4、模式比较简单:

public type getPropertyName();
public void setPropertyName(Type newValue);

如上所述,PropertyName是一个整体,用陀峰命名法(如果含2个或更多单词)。

而对于type是boolean类型的,是一个特例,他们采用如下的命名规则:

public boolean isPropertyName();
public void setPropertyName(boolean b);

5、上面说过了PropertyName要用驼峰标示法玛,例如filename,应该写为setFileName()。如果开头两个字母都是大写,如URL,那么就setURL吧,不要写setUrl。

6、由于上述规则具有一定技巧性,请一定注意不要和父类、接口继承的函数重名,否则可能会带来其他难以发现的Bug。

7、为了方便GUI(awt事件),还将检查结尾为Event的,IDE将认为此处可以拓展添加事件。

8、JavaBean的数据还可以返回数组(供索引下标):

// 直接返回、设置数组
Type[] getPropertyName();
void setPropertyName(Type [] newValue);
// 返回某一个
Type getPropertyName(int i);
void setPropertyName(int i, Type newValue);

但注意:上述方法不能扩充数组!即i必须小于内部属性的length。

9、还可以对JavaBean设置属性变化的通知事件。

10、跳过大段和GUI相关的……

11、JavaBean的持久化是指:用JavaBean的属性保存Bean内状态。在之后某个时刻,或者在另一个虚拟机中再将他们读取出来。

12、XMLEncoder可以完成将对象->流->XML文件的转化:

(java.beans.XMLDecoder / java.beans.XMLEncoder)

// 序列化
XMLEncoder out  = new XMLEncoder(new FileOutputSteram(...));
out.writeObject(xxbean);
out.close();

// 反序列化
XMLDecoder in = new XMLDecoder(new FileInputStream(...));
XXXBean bean = in.readObject();
in.close();

13、上述XMLDecoder/XMLEncoder内置支持了如下数据类型:

null、所有基本数据类型及包装类、枚举、String、数组、集合、映射、AWT的很多类。

14、如果要实现自己的输出、解析包装,可以继承java.beans.PersistenceDelegate,需要覆盖如下函数:

protected abstract Expression instantiate(Object oldInstance, Encoder out)

15、JavaBean适于存储的是:

长期存储、小且快、易于生成、易于人工编辑、是标准Java的一部分。

本章GUI涉及过多。。跳过了很多。。

 

 

 

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *