Java Bean简单介绍

        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 finalclass 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;

        }

}

        然后发布了2.0版:java-int-list_2.0.jar。发布后,原有java-int-list_1.0.jar的用户纷纷升级版本到2.0。这些用户一升级,就发现自己的程序全部坏掉了,说是找不到什么size变量。于是这些用户就把作者暴打一顿,再也不敢用java-int-list库了。  这个故事告诉我们,如果不想被暴打致死,你就必须保持向后兼容性。太阳公司在设计Java语言时,也懂得这个道理。所以Java标准库中,绝对不会出现public int size这样的代码,而一定会一开始就写成: private int size; public int getSize() { return size; } 让用户一开始就使用getSize,以便有朝一日修改getSize实现时,不破坏向后兼容性。这种public int getSize() { return size; }的惯用手法,就是Java Bean。

下面是一个Person类,使用了JavaBean。

public class Person {

         private String name;

         private String sex;

         private int age;

         private String address;

         public Person() {

                   super();

         }

         public Person(String name, String sex, int age, String address) {

                   super();

                   this.name =name;

                   this.sex =sex;

                   this.age =age;

                   this.address= address;

         }

         public StringgetName() {

                   return name;

         }

         public voidsetName(String name) {

                   this.name =name;

         }

         public String getSex(){

                   return sex;

         }

         public voidsetSex(String sex) {

                   this.sex =sex;

         }

         public int getAge() {

                   return age;

         }

         public void setAge(intage) {

                   this.age =age;

         }

         public StringgetAddress() {

                   return address;

         }

         public voidsetAddress(String address) {

                   this.address= address;

         }

         public String toString() {

                   return"Person [name=" + name + ", sex=" + sex + ",age=" + age

                                     +", address=" + address + "]";

         }

}

        我们可以通过Person对象的set和get方法对成员变量赋值或取值。也可以通过toString()方法来打印Person对象的属性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值