每天学Java!Java Bean是什么概念 java@bean

createh53周前 (12-19)技术教程15

对于初学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。

(内容整理自知乎)

相关文章

哪里有 class 告诉我? class在哪

说明本文中的 JVM 参数和代码在 JDK 8 版本生效。哪里有用户类?用户类是由开发者和第三方定义的类,它是由应用程序类加载器加载的。Java 程序可以通过CLASSPATH 环境变量,JVM 启动...

50个常见 Java 错误以及如何避免它们

在开发 Java 软件时可能会遇到许多类型的错误,但大多数都是可以避免的。我们收集了 50 个最常见的 Java 软件错误,并附有代码示例和教程,可帮助您解决常见的编码问题。编译器错误当 Java 软...

Java零基础入门,科普Java你应该了解什么

最近很多人问我想学Java但是一点基础没有,网上看了一堆学习线路图还是无从下手。今天耗时3小时整理了一套保姆级的Java入门教程,建议收藏按照线路图一点点学习。一、Java的概况Java是1995年6...

这6个java基础面试题,虐哭了多少人

基础常识终端命令行指令(常用DOS命令)dir:列出当前目录下的文件及文件夹cd:进入到指定路径cd..:退回上一级目录cd\:退回到根目录下md:创建文件目录rd:删除文件目录del:删除文件exi...

Java面试宝典之问答系列 java 面试问题

以下内容,由兆隆IT云学院就业部根据多年成功就业服务经验提供:1. 写出从数据库表Custom中查询No、Name、Num1、Num2并将Name以姓名显示、计算出的和以总和显示的SQL。SELECT...