javaBean和一般的class有什么不同

zishuchen 2003-06-13 08:53:17
比如我要建立一个类时,是选择JavaBean还是类好呢
...全文
138 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zeeler 2003-06-15
  • 打赏
  • 举报
回复
1. Simple属性
Simple 属性表示伴随有一对get/set方法(C语言的过程或函数在Java程序中称为”方法”)的变量。属性名与和该属性相关的get/set方法名对应。例如:如果有setX和getX方法,则暗指有一个名为”X”的属性。如果有一个方法名为i s X,则通常暗指”X”是一个布尔属性(即X的值为true或false)。例如,在下面这个程序中:
public class alden1 extends Canvas {
string ourString= "Hello";
//属性名为ourString,类型为字符串
public alden1(){
//alden1()是alden1的构造函数,与C++中构造函数的意义相同
}
/* "set"属性*/
public void setString(String newString) {
}
/* "get"属性*/
public String getString() {
}
}
2. Indexed属性
Indexed属性表示一个数组值。使用与该属性对应的set/get方法可取得数组中的数值。该属性也可一次设置或取得整个数组的值。例如:
public class alden2 extends Canvas {
int[] dataSet={1,2,3,4,5,6};
// dataSet是一个indexed属性
public alden2() {
setBackground(Color.red);
setForeground(Color.blue);
}
/* 设置整个数组 */
public void setDataSet(int[] x){
/* 设置数组中的单个元素值*/
public void setDataSet(int index, int x){
dataSet[index]=x;
}
/* 取得整个数组值*/
public int[] getDataSet(){
return dataSet;
}
/* 取得数组中的指定元素值*/
public int getDataSet(int x){
return dataSet[x];
}
}
3. Bound属性
Bound属性是指当该种属性的值发生变化时,要通知其他的对象。每次属性值改变时,这种属性就触发一个Property Change事件(在Java程序中,事件也是一个对象)。事件中封装了属性名、属性的原值、属性变化后的新值。这种事件传递到其他的Beans,至于接收事件的Beans应做什么动作,由其自己定义。
当Push Button的back ground属性与Dialog的back ground属性绑定时,若Push Button的back ground属性发生变化,Dialog的back ground属性也发生同样的变化。例如:
public class alden3 extends Canvas{
String ourString= "Hello";
//ourString是一个bound属性
private PropertyChangeSupport changes = new PropertyChangeSupport(this);
/*Java是纯面向对象的语言,如果要使用某种方法则必须指明是要使用哪个对象的方法,在下面的程序中要进行点火事件的操作,这种操作所使用的方法是在PropertyChangeSupport类中的。所以上面声明并实例化了一个changes对象,在下面将使用changes的firePropertyChange方法来点火ourString的属性改变事件。*/
public void setString(string newString){
String oldString = ourString;
ourString = newString;
/* ourString的属性值已发生变化,于是接着点火属性改变事件*/
changes.firePropertyChange("ourString",oldString,newString);
}
public String getString(){
return ourString;
}
/** 以下代码是为开发工具所使用的。我们不能预知alden3将与哪些其他的Beans组合成为一个应用,无法预知若alden3的ourString属性发生变化时有哪些其他的组件与此变化有关,因而alden3这个Beans要预留出一些接口给开发工具,开发工具使用这些接口,把其他的JavaBeans对象与alden3挂接。*/
public void addPropertyChangeListener(PropertyChangeLisener l){
changes.addPropertyChangeListener(l);
}
public void removePropertyChangeListener(PropertyChangeListener l){
changes.removePropertyChangeListener(l);
}

通过上面的代码,开发工具调用changes的add Property Change Listener方法把其他JavaBean注册入ourString属性的监听者队列l中,l是一个Vector数组,可存储任何Java对象。开发工具也可使用changes的removePropertyChangeListener方法,从l中注销指定的对象,使alden3的ourString属性的改变不再与这个对象有关。当然,当程序员手写代码编制程序时,也可直接调用这两个方法,把其他Java对象与alden3挂接。
4. Constrained属性
JavaBeans的Constrained属性是指当这个属性的值要发生变化时,与这个属性已建立了某种连
接的其他Java对象可否决属性值的改变。Constrained属性的监听者通过抛出Property VetoException来阻止该属性值的改变。
例如:下面程序中的Constrained属性是Price InCents。
public class JellyBean extends Canvas{
private PropertyChangeSupport changes=new PropertyChangeSupport(this);
private VetoableChangeSupport Vetos=new VetoableChangeSupport(this);
/*与前述changes相同,可使用VetoableChangeSupport对象的实例Vetos中的方法,在特定条件下来阻止PriceInCents值的改变。*/
......
public void setPriceInCents(int newPriceInCents) throws PropertyVetoException {
/* 方法名中throws PropertyVetoException的作用是当有其他Java对象否决PriceInCent s的改变时,要抛出例外。*/
/* 先保存原来的属性值*/
int oldPriceInCents=ourPriceInCents;
/**点火属性改变否决事件*/
vetos.fireVetoableChange
("priceInCents",new Integer(OldPriceInCents), new Integer(newPriceInCents));
/**若有其他对象否决priceInCents的改变,则程序抛出例外,不再继续执行下面的两条语句,方法结束。若无其他对象否决priceInCents的改变,则在下面的代码中把ourPriceIncents赋予新值,并点火属性改变事件*/
ourPriceInCents=newPriceInCents;
changes.firePropertyChange
("priceInCents", new Integer(oldPriceInCents),new Integer(newPriceInCents));
}
/**与前述changes相同,也要为PriceInCents属性预留接口,使其他对象可注册入PriceInCents否决改变监听者队列中,或把该对象从中注销
public void addVetoableChangeListener(VetoableChangeListener l){
vetos.addVetoableChangeListener(l);
}
public void removeVetoableChangeListener(VetoableChangeListener l){
vetos.removeVetoableChangeListener(l);
}
......
}
从上面的例子中可看到,一个Constrained属性有两种监听者:属性变化监听者和否决属性改变的监听者。否决属性改变的监听者在自己的对象代码中有相应的控制语句,在监听到有Constrained属性要发生变化时,在控制语句中判断是否应否决这个属性值的改变。

总之,某个Beans的Constrained属性值可否改变取决于其他的Beans或者是Java对象是否允许这种改变。允许与否的条件由其他的Beans或Java对象在自己的类中进行定义。
zeeler 2003-06-15
  • 打赏
  • 举报
回复
[转载]
JavaBeans就是Java的可重用组件技术。ASP通过COM来扩充复杂的功能, 如文件上载、发送email以及将业务处理或复杂计算分离出来成为独立可重复利用的模块。JSP通过JavaBean实现了同样的功能扩充。JSP 对于在Web 应用中集成JavaBean 组件提供了完善的支持。这种支持不仅能缩短开发时间(可以直接利用经测试和可信任的已有组件,避免了重复开发),也为JSP 应用带来了更多的可伸缩性。JavaBean 组件可以用来执行复杂的计算任务,或负责与数据库的交互以及数据提取等。在实际的JSP开发过程中,读者将会发现,和传统的A S P或P H P页面相比,JSP页面将会是非常简洁的,由于JavaBeans开发起来简单,又可以利用J a v a语言的强大功能,许多动态页面处理过程实际上被封装到了JavaBeans中。

JavaBeans是一个特殊的类,这个类必须符合JavaBeans规范。JavaBeans原来是为了能够在一个可视化的集成开发环境中可视化、模块化地利用组件技术开发应用程序而设计的。不过,在JS P中,不需要使用任何可视化的方面,但仍然需要利用JavaBeans的属性、事件、持久化和用户化来实现模块化的功能。下面分别介绍JavaBeans的属性、事件、持久化和用户化。

JavaBeans的属性与一般Java程序中所指的属性,或者说与所有面向对象的程序设计语言中
对象的属性是一个概念,在程序中的具体体现就是类中的变量。在JavaBeans设计中,按照属性的不同作用又细分为四类: Simple, Index, Bound与Constrained属性。
liliang_740705 2003-06-15
  • 打赏
  • 举报
回复
Summary of JavaBean Rules
A JavaBean has these characteristics:
· It is a public class.
· It has a public parameterless constructor (though it may have other constructors
as well)
· It implements Serializable interface (i.e. it can be made persistent, so its state can
be saved)
· It has properties with “getter” and “setter” methods named by following
JavaBeans naming patterns
· It has events which follow the standard Java event model with the registration
methods named by following the JavaBeans naming patterns
· It may have other methods which do not follow the naming patterns. These
methods are not exposed by a builder tool.
Comments:
A user of JavaBean components can built an application consisting of JavaBeans, by
customizing, and wiring JavaBeans together at design time, by using a builder tool in
an IDE (Integrated Development Environment), such as JBuilder.
The builder tool analyses and exposes the properties and events of the JavaBeans at
design time by means of introspection. A builder tool can do this only if proper naming
patterns have been followed to name the properties, and event registration methods (we
will not talk about the beanInfo class in these notes)
Naming patterns for properties:
Property name: <propertyName>
e.g. temperature
Property type: <Type>
e.g. double
Getter method: public <Type> get<PropertyName>() { //… }
e.g. double getTemperature() { // … }
Boolean Property Getter Method: public boolean is<PropertyName>() {
// … }
e.g. public boolean isFull() { // … }
Setter method: public void set<PropertyName>(<Type> p) { // … }
e.g. void setTemperature(double temp) { // … }
… Notes to be continued …
liliang_740705 2003-06-15
  • 打赏
  • 举报
回复
详情可见http://java.sun.com/products/javabeans/docs/beans.101.pdf
liliang_740705 2003-06-15
  • 打赏
  • 举报
回复
楼上的兄弟说了一部分。
一般javabean还要求:成员变量必须声明为Private,同时最好实现java.io.Serializable 接口
hualong2000 2003-06-15
  • 打赏
  • 举报
回复
javabean 是类的范化,类是javabean 的组成方式,
javabean 实际上是用java语言开发的可以重用的构件。
wlf7777 2003-06-15
  • 打赏
  • 举报
回复
没有太大的区别,bean是特殊的类。
Sheepy 2003-06-14
  • 打赏
  • 举报
回复
javabean是类,单是是一种有特殊约定的类。它规定对他的属性进行读写操作的方法的名字必须是这样的:
如果有一个属性叫做a,则读取属性的方法叫做getA(),修改属性的方法叫做setA()。
有了这样的规定,就可以在其他场合以通用的方法使用这个类了。比如在jsp中,用<jsp:getProperty/>标签就可以调用get方法,也就是说不一定要在java代码中也能调用这个类了,这就是javabean的特殊之处。
用途现在最广的就是在jsp中。以前曾经是java图形开发广泛使用的技术。
jan4984 2003-06-14
  • 打赏
  • 举报
回复

我只在做jsp的时候用过。:(
arthurxoyo 2003-06-14
  • 打赏
  • 举报
回复
你的意思是不是:什么时候该用JAVABEAN
xqi8 2003-06-14
  • 打赏
  • 举报
回复
没有区别
yangjuanli 2003-06-14
  • 打赏
  • 举报
回复
没有区别吧!
凋零的老树 2003-06-13
  • 打赏
  • 举报
回复
JavaBean就是类啊

81,095

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧