- 浏览: 200370 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
hankcs:
专门登陆来评论,这篇文章真差劲!
JAVA中assert使用[转] -
loyy77:
zengbin163 写道你上面的代码我执行时没有问题的我的J ...
JAVA中assert使用[转] -
guji528:
负数左移操作导致溢出现象:
byte b = -15; //负 ...
二进制、八进制、十六进制[转] -
guji528:
解说得很详细:
调试FileInputStream.read( ...
二进制、八进制、十六进制[转] -
m_desire2010:
非常清晰的思路!支持楼主!
斐波那契数(JAVA实现)
JavaBean的属性与一般Java程序中所指的属性,或者说与所有面向对象的程序设计语言中对象的属性是一个概念,在程序中的具体体现就是类中的变量。在JavaBean设计中,按照属性的不同作用又细分为四类:Simple, Index, Bound与Constrained属性。
3.1.1 Simple属性
一个简单属性表示一个伴随有一对get/set方法(C语言的过程或函数在Java程序中称为"方法")的变量。属性名与和该属性相关的get/set方法名对应。例如:如果有setX和getX方法,则暗指有一个名为"X"的属性。如果有一个方法名为isX,则通常暗指"X"是一个布尔属性(即X的值为true或false)。例如在下面这个程序中:
public class alden1 extends Canvas {
string ourString= "Hello"; //属性名为ourString,类型为字符串
public alden1(){ //alden1()是alden1的构造函数,与C++中构造函数的意义相同
setBackground(Color.red);
setForeground(Color.blue);
}
/* "set"属性*/
public void setString(String newString) {
ourString=newString;
}
/* "get"属性 */
public String getString() {
return ourString;
}
}
3.1.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){
dataSet=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.1.3 Bound属性
一个Bound属性是指当该种属性的值发生变化时,要通知其它的对象。每次属性值改变时,这种属性就点火一个PropertyChange事件(在Java程序中,事件也是一个对象)。事件中封装了属性名、属性的原值、属性变化后的新值。这种事件是传递到其它的Bean,至于接收事件的Bean应做什么动作由其自己定义。
图3.1是一个简单Bound属性示意图,当PushButton的background属性 与Dialog的background属性bind时,若PushButton的background属性发生变化时,Dialog的background属性也发生同样的变化。 例:
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将与哪些其它的Bean组合成为一个应用,无法预知若alden3的ourString属性发生变化时有哪些其它的组件与此变化有关,因而alden3这个Bean要预留出一些接口给开发工具,开发工具使用这些接口,把其它的JavaBean对象与alden3挂接。*/
public void addPropertyChangeListener(PropertyChangeLisener l){
changes.addPropertyChangeListener(l);
}
public void removePropertyChangeListener(PropertyChangeListener l){
changes.removePropertyChangeListener(l);
}
通过上面的代码,开发工具调用changes的addPropertyChangeListener方法把其它JavaBean注册入ourString属性的监听者队列l中,l是一个Vector数组,可存储任何Java对象。开发工具也可使用changes的removePropertyChangeListener方法,从l中注销指定的对象,使alden3的ourString属性的改变不再与这个对象有关。当然,当程序员手写代码编制程序时,也可直接调用这两个方法,把其它Java对象与alden3挂接。
3.1.4 Constrained属性
一个JavaBean的constrained属性,是指当这个属性的值要发生变化时,与这个属性已建立了某种连接的其它Java对象可否决属性值的改变。constrained属性的监听者通过抛出PropertyVetoException来阻止该属性值 的改变。过程如图3.2
例:下面程序中的constrained属性是PriceInCents。
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对象否决PriceInCents的改变时,要抛出例外。*/ /* 先保存原来的属性值*/
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属性要发生变化时,在控制语句中判断是否应否决这个属性值的改变。
总之,某个Bean的constrained属性值可否改变取决于其它的Bean或者是Java对象是否允许这种改变。允许与否的条件由其它的Bean或Java对象在自己的类中进行定义。
3.1.1 Simple属性
一个简单属性表示一个伴随有一对get/set方法(C语言的过程或函数在Java程序中称为"方法")的变量。属性名与和该属性相关的get/set方法名对应。例如:如果有setX和getX方法,则暗指有一个名为"X"的属性。如果有一个方法名为isX,则通常暗指"X"是一个布尔属性(即X的值为true或false)。例如在下面这个程序中:
public class alden1 extends Canvas {
string ourString= "Hello"; //属性名为ourString,类型为字符串
public alden1(){ //alden1()是alden1的构造函数,与C++中构造函数的意义相同
setBackground(Color.red);
setForeground(Color.blue);
}
/* "set"属性*/
public void setString(String newString) {
ourString=newString;
}
/* "get"属性 */
public String getString() {
return ourString;
}
}
3.1.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){
dataSet=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.1.3 Bound属性
一个Bound属性是指当该种属性的值发生变化时,要通知其它的对象。每次属性值改变时,这种属性就点火一个PropertyChange事件(在Java程序中,事件也是一个对象)。事件中封装了属性名、属性的原值、属性变化后的新值。这种事件是传递到其它的Bean,至于接收事件的Bean应做什么动作由其自己定义。
图3.1是一个简单Bound属性示意图,当PushButton的background属性 与Dialog的background属性bind时,若PushButton的background属性发生变化时,Dialog的background属性也发生同样的变化。 例:
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将与哪些其它的Bean组合成为一个应用,无法预知若alden3的ourString属性发生变化时有哪些其它的组件与此变化有关,因而alden3这个Bean要预留出一些接口给开发工具,开发工具使用这些接口,把其它的JavaBean对象与alden3挂接。*/
public void addPropertyChangeListener(PropertyChangeLisener l){
changes.addPropertyChangeListener(l);
}
public void removePropertyChangeListener(PropertyChangeListener l){
changes.removePropertyChangeListener(l);
}
通过上面的代码,开发工具调用changes的addPropertyChangeListener方法把其它JavaBean注册入ourString属性的监听者队列l中,l是一个Vector数组,可存储任何Java对象。开发工具也可使用changes的removePropertyChangeListener方法,从l中注销指定的对象,使alden3的ourString属性的改变不再与这个对象有关。当然,当程序员手写代码编制程序时,也可直接调用这两个方法,把其它Java对象与alden3挂接。
3.1.4 Constrained属性
一个JavaBean的constrained属性,是指当这个属性的值要发生变化时,与这个属性已建立了某种连接的其它Java对象可否决属性值的改变。constrained属性的监听者通过抛出PropertyVetoException来阻止该属性值 的改变。过程如图3.2
例:下面程序中的constrained属性是PriceInCents。
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对象否决PriceInCents的改变时,要抛出例外。*/ /* 先保存原来的属性值*/
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属性要发生变化时,在控制语句中判断是否应否决这个属性值的改变。
总之,某个Bean的constrained属性值可否改变取决于其它的Bean或者是Java对象是否允许这种改变。允许与否的条件由其它的Bean或Java对象在自己的类中进行定义。
发表评论
-
window.open()的所有参数列表
2009-04-08 16:32 1322前言:经常上网的朋友可能会到过这样一些网站, ... -
JAVA如何调用DOS命令
2008-10-06 22:04 1573用Java编写应用时,有时需要在程序中调用另一个现成的可执行程 ... -
一个字符串中如何得到汉字的个数?
2008-09-11 18:06 2411最近碰到了一面试题:一个字符串中如何得到汉字的个数?比如&qu ... -
一道面试题
2007-08-02 20:35 1036We are hiring intermediate or e ... -
DOUBLE值四舍五入
2007-08-02 20:29 2211API里没有现成的方法 public static ... -
斐波那契数(JAVA实现)
2007-07-15 13:26 16607求Fibonacci数列的前20个数。该数列有如下特点: 第1 ... -
如何得到一个字符串中汉字的个数?
2007-07-08 11:47 3212最近碰到了一面试题:一个字符串中如何得到汉字的个数?比如& ... -
JAVA转义符
2007-06-28 17:45 24419转义序列 含义 \n 回车(\u000a) \t 水平制表 ... -
防止重复提交
2007-06-25 14:34 1382//prevent to submit repeatedly ... -
JavaScript中数字的比较
2007-05-23 18:38 3759错误代码: js 代码 ... -
正则表达式大全(regular expression)[转]
2007-05-23 11:37 4784前言 正则表达式是烦琐的,但是强大的,学会之后的应用会让你除了 ... -
二进制、八进制、十六进制[转]
2007-05-16 22:25 7784这是一节“前不着村 ... -
JSP 分页显示[转]
2007-05-14 10:26 3118java 代码 <%@ page cont ... -
Re: Runtime.exec()的使用
2007-05-11 15:10 1657问:为什么Runtime.exec("ls" ... -
抽象类和接口的区别
2007-05-11 14:56 6197抽象类和接口在语法和 ... -
关于java异常处理机制的深入理解[转自编程爱好者]
2007-05-07 17:30 23861 引子 try…catch…finally ... -
JAVA中assert使用[转]
2007-05-07 16:52 21897assert是在J2SE1.4中引入的新特性,assertio ... -
refactoring 1
2007-04-25 16:45 15771,Although the condition " ... -
精妙SQL
2007-04-24 14:39 3686下列语句部分是Mssql语 ... -
关于Java Runtime运行一段时间挂起的问题
2007-04-19 16:43 2340Below quote from http://alartin ...
相关推荐
以下是对四种不同类型的JavaBean属性的详细说明: 1. **Simple 属性** Simple属性是最基础的属性类型,它包含一对getter和setter方法,用于获取和设置属性的值。属性名称通常与getter和setter方法的名字相对应。...
### JavaBean属性命名规范 JavaBean是一种遵循特定编码标准的Java类,主要用于封装数据或表示简单的数据载体。在JavaBean中,属性的命名规范是非常重要的,因为它直接影响到代码的可读性和可维护性,同时也会影响到...
下面我们将详细探讨这三个类的使用方法以及它们在字符串到JavaBean属性赋值中的应用。 首先,`BeanUtils`是Apache Commons BeanUtils库中的核心类,提供了大量与JavaBean操作相关的功能。其中,`BeanUtils....
JavaBean转XML的过程与XML转JavaBean相反。首先,创建一个JAXBContext对象,然后获取Marshaller实例。通过调用Marshaller的marshal()方法,我们可以将JavaBean对象转换为XML字符串或者写入XML文件。 3. XML标签大小...
而JAXB(Java Architecture for XML Binding)是Java提供的一种标准API,它允许我们轻松地在Java对象(javabean)和XML文档之间进行转换。通过JAXB,开发者可以避免手动编写XML解析和序列化代码,极大地提高了开发...
它提供了一种简单的方式来映射JavaBean属性到XML元素,反之亦然。在本例中,我们主要关注`BeanXmlMapping`工具类,它是Jox库中的关键组件,负责执行XML和JavaBean之间的转换操作。 `BeanXmlMapping`提供了两个主要...
jox库的优点在于其简洁的API和对JavaBean属性的自动映射,使得开发人员能够快速地进行数据交换。 5. **注意事项** - 确保JavaBean的属性名称与XML元素名称相匹配,因为jox库默认使用属性名称作为XML元素的标签。 ...
"minimalcode-convert"是一个Java项目,专注于提供一个简约的JavaBean属性转换系统。这个工具的设计目标是简化Java对象之间的数据转换过程,特别是在处理不同数据结构间的映射时,如JSON到Java对象、Java对象到...
在某些情况下,JavaBean的属性与JsonString中的键可能不完全匹配,或者需要进行一些特殊处理,这时可以通过注解或自定义`JsonSerializer`和`JsonDeserializer`来实现。 总结,JavaBean和JsonString的转换是Java...
可以 将 数据库表中字段转为相应的 javaBean 对象 很方便的 生产bean
"Json一键转Javabean工具"是一个实用的开发辅助工具,它能够帮助Java开发者快速地将JSON格式的数据转换成对应的JavaBean对象,极大地提高了开发效率。 JSON转换为JavaBean的过程通常包括以下步骤: 1. **解析JSON...
- **使用DOM(Document Object Model)**:通过创建Document对象,遍历JavaBean的属性,然后创建Element节点和Text节点,构建XML文档结构。 - **使用JAXB(Java Architecture for XML Binding)**:JAXB是Java标准...
JavaBean遵循一定的规范,通常包含一个无参数的构造器,属性私有化并提供getter和setter方法,以及可能的逻辑业务方法。例如,一个简单的User JavaBean可以这样定义: ```java public class User { private String...
反之,从JavaBean到XML的过程则是获取JavaBean的属性值,生成相应的XML元素和属性。 8. **性能考虑**:不同的转换方法有不同的性能特征。例如,DOM需要大量内存,适合小到中型的XML;SAX和StAX更适合大型XML,因为...
JavaBean的属性与一般Java程序中所指的属性,或者说与所有面向对象的程序设计语言中对象的属性是一个概念,在程序中的具体体现就是类中的变量。在JavaBean设计中,按照属性的不同作用又细分为四类:Simple, Index, ...
1. 属性(properties):JavaBean 提供了高层次的属性概念,属性在 JavaBean 中不只是传统的面向对象的概念里的属性,它同时还得到了属性读取和属性写入的 API 的支持。 2. 方法(method):JavaBean 中的方法就是...
Java 基础之 JavaBean 属性命名规范问题 JavaBean 属性命名规范问题是 Java 开发中一个重要的知识点。JavaBean 是一种特殊的 Java 类,它遵循特定的命名规范,以便于其他 Java 类可以正确地访问和操作它的属性。...
JavaBean遵循一定的规范,通常包含私有属性、公有的getter和setter方法,以及一个无参构造函数。例如: ```java public class User { private String name; private int age; public User() {} public String...
它应具有默认的无参构造器,公开的属性(getter和setter方法)以及可选的操作方法。例如: ```java public class User { private String name; private int age; public User() {} public String getName() {...
"json一键转javabean工具"是一个非常实用的开发辅助工具,它的主要功能是将JSON格式的数据自动转换为对应的JavaBean类,大大节省了开发者手动编写Java类的时间,提高了开发效率。这个工具可能包含以下特性: 1. **...