什么是JavaBean?
我明白,我认为,“Bean”是一个具有属性和getter / setter的Java类。 据我所知,它相当于一个C结构。 真的吗?
另外,bean和普通类之间是否存在真正的语法差异? 有没有特殊的定义或界面?
基本上,为什么会有这样的术语?
编辑 :如果你可以如此善良并添加有关Serializable
接口的信息,以及它的含义,对于你的回答,我会非常感激。
JavaBean只是一个标准
Serializable
。 而已。 这只是一个惯例。 虽然很多图书馆依赖于它....
关于Serializable
,来自API文档:
类的可序列化由实现java.io.Serializable接口的类启用。 没有实现这个接口的类将不会有任何状态序列化或反序列化。 可序列化类的所有子类本身都是可序列化的。 序列化接口没有方法或字段,仅用于识别可序列化的语义。
换句话说,可序列化的对象可以写入流中,因此可以写入文件,对象数据库,任何事情。
此外,JavaBean和另一个类之间没有语法上的区别 - 一个类如果遵循标准定义了一个JavaBean。
这里有一个术语,因为该标准允许库以编程方式对您以预定义方式定义的类实例执行操作。 例如,如果一个库想要传入任何你传入的对象,它就知道它可以,因为你的对象是可序列化的(假设lib需要你的对象是适当的JavaBean)。
有一个术语让它听起来很特别。 现实远不如此神秘。
基本上,一个“豆”:
java.io.Serializable
,并且是正确的) getFoo()
是“Foo”属性的getter),并且 更新:
至于可Serializable
:这只不过是一个“标记接口”(一种不声明任何函数的接口),它告诉Java实现类同意(并且暗示它能够)“序列化” - 一个过程将实例转换为字节流。 这些字节可以存储在文件中,通过网络连接等发送,并且有足够的信息允许JVM(至少知道该对象的类型)稍后重建对象 - 可能在不同的实例中应用程序,甚至在整个其他机器!
当然,为了做到这一点,班级必须遵守某些限制。 其中最主要的是所有实例字段必须是原始类型(int,bool等),某些类的实例也是可序列化的,或者标记为transient
以便Java不会尝试包含它们。 (这当然意味着transient
场将无法在流之上继续存在。具有transient
场的类应该准备在必要时重新初始化它们。)
一个不能遵守这些限制的类不应该实现Serializable
(和,IIRC,Java编译器甚至不会让它这样做。)
JavaBeans是坚持一种非常简单的编码惯例的Java类。 你所要做的就是