每天学Java!Java Bean是什么概念 java@bean
对于初学Java,或者是刚接触J2EE的人来说,Java bean确实是一个不太好理解的概念,对于一些专业的解释呢,好像看起来也不是那么容易理解。所以小华君今天就准备跟大家说一说Java bean的概念。
按照专业一点的说法,Java bean是一种Java语言写成的可重用组件。为写成Java bean,类必须是具体的和公共的,并且具有无参数的构造器。Java bean通过提供符合一致性设计模式的公共方法将内部域暴露成员属性。属性名称符合这种模式,其他Java类可以通过自身机制发现和操作这些Java bean的属性。
我们通俗一点解释一下,也就是说Java bean是符合一定规范编写的Java类,不是一种技术,而是一种规范。大家针对这种规范,总结了很多开发技巧、工具函数。符合这种规范的类,可以被其它的程序员或者框架使用。事实上,Java bean首次发布是在1996年12月,目的就是为了通过统一的规范可以设置对象的值(get,set)方法。
在《Think in Java》一书中,作者提到了Java bean最初是为Java GUI的可视化编程实现的。拖动IDE构建工具创建一个GUI组件,其实是工具创建Java类并提供将类的属性暴露出来给你修改调整,将事件监听器暴露出来。
我们都知道,Java语言在属性、时间和多重继承功能方面做得并不好。程序员想在程序中实现一些面向对象编程的常见需求,只能手写大量胶水代码。而Java bean就是编写这套胶水代码的惯用模式或约定。当类遵守了这些约定时就可以用于若干工具或库,这些约定包括getXxx、setXxx、isXxx、addXxxListener、XxxEvent等。
我们还是举个栗子来看一下。比如你要用Java实现一个单向链表类,你可能会这样写:
// 编译成 java-int-list_1.0.jar
public final class JavaIntList {
static class Node {
public Node next;
public int value;
}
public Node head;
public int size;
}
上述实现为了能够快速获取链表的大小,把链表的大小缓存在size变量中,会采用这种用法:
JavaIntList myList = new JavaIntList();
System.out.println(myList.size);
JavaIntList的作者很满意,于是开源了java-int-list库的1.0版。文件名是java-int-list_1.0.jar。发布后,吸引了许多用户来使用java-int-list_1.0.jar。
有一天,你突然决定要节省内存,不要缓存size变量了,就把代码改成了这样:
// 编译成 java-int-list_2.0.jar
public final class JavaIntList {
static final class Node {
public Node next;
public int value;
}
public Node head;
public int getSize() {
Node n = head;
int i = 0;
while (n != null) {
n = n.next;
i++;
}
return i;
}
}
然后发布了java-int-list_2.0.jar。发布后,原有java-int-list_1.0.jar的用户纷纷升级版本到2.0。这些用户一升级,就发现自己的程序全部坏掉了,说是找不到什么size变量。然后用户都被你气炸了,说再也不用你写的东西了。
所以为了保持你写的东西能够有人用,你就必须保持向后兼容性。太阳公司在设计Java语言时,也懂得这个道理。在Java标准库中,绝对不会出现public int size这样的代码,而一定会一开始就写成:
private int size;
public int getSize() { return size; }
这让用户一开始就使用getSize,以便有朝一日修改getSize实现时,不破坏向后兼容性。这种public int getSize() { return size; }的惯用手法,就是Java bean。
(内容整理自知乎)