当前位置:首页 > 技术知识 > 正文内容

每天学Java!Java Bean是什么概念(java bean有什么用)

maynowei8个月前 (08-05)技术知识146

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

(内容整理自知乎)

相关文章

Win10系统除了移植Objective C,还要有Swift

IT之家讯Build2015大会最让人震惊的莫属微软推出工具,Win10系统可以移植安卓/iOS应用,特别是后者使用的Objective C编程语言,不过最新消息表明,微软连苹果最新的Swift移植也...

伪装成抖音国际版Tiktok的短信蠕虫

概述近期监测到一款仿冒Tiktok的短信蠕虫,该短信蠕虫最明显的特点就是针对Android系统版本高于6.0以上的设备,由于Android版本的更新迭代,现在大部分设备已经更新到较高的版本,通过不完全...

那些技术—Listview的性能提高篇(listview提高效率)

ListView优化一直是一个老生常谈的问题,不管是面试还是平常的开发中,ListView永远不会被忽略掉,那么这篇文章我们来看看如何最大化的优化ListView的性能。 · 1.在adapter中的...

Shopee新手指南:Shopee卖家中心用户界面介绍

1.Shopee各站点前台网页链接:2.Shopee各站点后台网页链接3.Shopee APP下载:安卓版下载链接:https://pan.baidu.com/s/1eSp8M1k#list/path...

Amundi sees "US Exceptionalism" eroding, while turns bullish on China's AI

南方财经全媒体记者 袁思杰 孙迟悦 香港报道"The support for US exceptionalism has weakened since the beginning of this ye...

postgresql-15.4 多节点主从(读写分离)

1、下载软件[root@TX-CN-PostgreSQL01-252 software]# wget https://ftp.postgresql.org/pub/source/v15.4/postg...