《21天学通Java(第7版)》—— 1.4 属性和行为

1.4 属性和行为

Java类包含两种不同的信息:属性和行为。

这两者在MarsRobot中都有,这是今天将作为类实现的项目。该项目使用计算机模拟行星探测工具,灵感来自NASA喷气推进实验室(Jet Propulsion Laboratory)用来探测火星表面地质情况的火星探测车(Mars Exploration Rovers)。

创建该程序之前,您需要学习一些如何使用Java编写面向对象程序的知识。刚接触时,面向对象概念可能难以理解,但本书将给您提供大量将这些概念付诸实践的机会。

1.4.1 属性

属性(attribute)是对象区别于其他对象的数据,可用于确定属于该类的对象的外观、状态和其他性质。

探测工具可能有如下属性。

  • 状态:探测、移动、返回。
  • 速度:以每小时的英里数计量。
  • 温度:以华氏温度计量。
  • 在类中,属性是通过变量定义的,变量是计算机程序中用来存放信息的位置。实例变量是这样的属性,即它们的值随对象而异。

实例变量(instance variable)定义了特定对象的属性。对象的类定义了属性的类型,每个实例都存储了自己的属性值。实例变量也被称为对象变量(object variable)或成员变量(member variable)。

每个类属性都有一个相应的变量,可以通过修改该变量的值来修改对象的属性。

例如,MarsRobot类定义了一个名为speed的实例变量。这必须定义成一个实例变量,因为每个机器人都以不同的速度运动。可以通过修改机器人的speed实例变量,使该机器人更快或更慢地移动。

创建对象时,可以给实例变量赋值,并在对象的整个生命期中保持不变;也可以在程序运行过程中使用该对象时,给它指定不同的值。

对于其他变量,让类的全部对象共享同一个值更合理,这些属性叫做类变量。

类变量(class variable)定义了类的属性。该变量用于类本身及其所有实例,因此不管使用该类创建了多少个对象,都只存储该变量的一个值。

在MarsRobot类中,存储机器人最大移动速度的变量topSpeed就是一个类变量。如果使用实例变量来存储这种速度,则在每个对象中,该变量的值都可能不同。这可能引发问题,因为没有机器人能超过指定的速度。

使用类变量可以避免这种问题,因为类的所有对象共享相同的值。每个MarsRobot对象都能够访问该变量。

1.4.2 行为

行为(behavior)指的是对象能够对自身和其他对象执行的操作。行为可以用来修改对象的属性、接收来自其他对象的信息以及向其他对象发送消息让它们执行任务。

火星机器人可能有如下行为:

  • 检查当前温度;
  • 开始勘测;
  • 加速或减速;
  • 报告当前位置。
  • 行为是使用方法实现的。

方法(method)是类中一组用来完成特定任务的相关语句。它们用来针对对象本身或其他对象执行特定任务,相当于其他编程语言中的函数和子程序。设计良好的方法只执行一项任务。

对象间能够通过方法彼此通信。类或对象可能调用其他类和对象的方法,其原因很多,例如:

  • 将变化告知另一个对象;
  • 让其他对象对自身进行修改;
  • 让其他对象执行某项操作。
  • 例如,两个火星机器人可以使用方法来报告彼此的位置,以免碰撞;一个机器人可以要求另一个停下来,以便它能够顺利通过。

正如变量分为实例变量和类变量一样,方法也分为实例方法和类方法。实例方法(instance method)很常见,因此它们通常被简称为方法,用于处理类的一个对象。如果一个方法对各个对象进行修改,它必须是实例方法。类方法(class method)适用于类本身。

1.4.3 创建类

为说明类、对象、属性和行为,您将开发一个MarsRobot类,使用这个类创建对象并在程序中使用它们。

该程序的主旨是探索面向对象编程。有关Java编程语法的更详细的信息,请参阅第2章。
本书创建Java程序时,使用的开发工具主要是NetBeans。NetBeans将Java类组织成项目。使用项目来存储您在本书创建的类很有帮助。如果您还没有创建项目,现在就这样做。

1.选择菜单“文件”>“新建项目”,这将打开“新建项目”对话框。

2.在“类别”窗格中选择Java。

3.在“项目”窗格中选择“Java应用程序”,再单击“下一步”按钮,这将打开“新建Java应用程序”对话框。

4.在文本框“项目名称”中输入项目名(我使用的是Java21)。在您输入项目名称的同时,文本框“项目文件夹”的内容将相应地更新。请将这个文件夹记录下来——您编写的Java程序将存储在这个文件夹中。

5.取消选择复选框“创建主类”。

6.单击“完成”按钮。

这将创建一个项目,您可在本书中始终使用它。

如果您以前创建过项目,可能已经在NetBeans中打开了它(如果没有,请选择菜单“文件”>“打开最近的项目”,并选择该项目)。您新建类时,它将添加到当前打开的项目中。

新建的项目将在NetBeans中打开。下面在这个项目中添加一个新类。

1.选择菜单“文件”>“新建文件”,打开“新建文件”对话框。

2.在“类别”窗格中选择Java。

3.在“文件类型”窗格中选择“空Java文件”,再单击“下一步”按钮,这将打开“空Java文件”对话框。

4.在文本框“类名”中输入MarsRobot,文本框“创建的文件”中显示了您将创建的文件的名称——MarsRobot.java,且不能编辑。

5.单击“完成”按钮。

这将打开NetBeans源代码编辑器,其中包含一个空文件。输入程序清单1.1所示的代码,再选择菜单“文件”>“保存”,这将保存文件MarsRobot.java。

不要输入该程序清单中每行开头的行号,它们不是程序的组成部分。本书使用行号旨在方便描述各个代码行。
程序清单1.1 MarsRobot.java的完整源代码

1: class MarsRobot {
2:      String status;
3:      int speed;
4:      float temperature;
5:
6:      void checkTemperature() {
7:           if (temperature < -80) {
8:                status = "returning home";
9:                speed = 5;
10:          }
11:     }
12:
13:     void showAttributes() {
14:          System.out.println("Status: " + status);
15:          System.out.println("Speed: " + speed);
16:          System.out.println("Temperature: " + temperature);
17:     }
18: }

当您保存该文件时,如果没有错误,NetBeans将自动创建MarsRobot类。这个过程称为编译类,使用的是名为编译器的工具。编译器将源代码行转换为Java虚拟机能够运行的字节码。

在程序清单1.1中,第1行的class语句定义了一个名为MarsRobot的类。从第1行的大括号({)到第18行的大括号(})之间的所有内容都属于这个类。

MarsRobot类包含3个实例变量和2个实例方法。

实例变量是在第2~4行定义的:

String status;
int  speed;
float  temperature;

变量名为status、speed、temperature,其中每个变量都将用来存储一种不同类型的信息。

  • status:存储一个String对象——一组字母、数字、标点和其他字符。
  • speed:存储一个int对象,即整数值。
  • temperature:存储一个float对象,即浮点数值。
  • String对象是使用Java类库中的String类创建的。

从该程序可知,类可以将对象作为实例变量。
MarsRobot类的第一个实例方法是在第6~11行定义的:

void checkTemperature() {
     if (temperature < -80) {
          status = "returning home";
          speed = 5;
     }
}

方法的定义方式与类相似,首先是指定方法名称、返回值和其他内容的语句。

CheckTemperature( )方法位于第6行和第11行的大括号之间。可对MarsRobot对象调用该方法,以确定其温度。

该方法检查对象的temperature实例变量的值是否小于-80。如果是,则修改另外两个实例变量:

将变量status改为returning home,这表明温度太低,机器人应返回基地;
将speed改为5(假设这是机器人的最快速度)。
第二个实例方法——showAttributes( )是在第13~17行定义的:

void showAttributes() {
     System.out.println("Status: " + status);
     System.out.println("Speed: " + speed);
     System.out.println("Temperature: " + temperature);
}

这个方法使用System.out.println( )来显示3个实例变量的值,同时显示一些文本用于解释每个值的含义。

如果还没有保存该文件,请选择菜单“文件”>“保存”。如果保存文件后没有修改过它,该菜单项将不可用。

1.4.4 运行程序

即便您正确地输入了程序清单1.1所示的代码,并将其编译成了类,也无法使用它来做任何事情。您所创建的类定义了MarsRobot对象,但没有创建这种对象。

使用MarsRobot类的方式有两种:

创建一个独立的Java程序,并在其中创建这个类的对象;
在MarsRobot类中添加一个特殊的类方法——main( ),使之能作为一个应用程序运行;然后在方法main( )中创建MarsRobot对象。
这里使用第一种方法。

程序清单1.2是Java类MarsApplication的源代码,它创建一个MarsRobot对象、设置其实例变量并调用其方法。请按前面介绍的步骤在NetBeans中新建一个文件,并将其命名为MarsApplication;具体步骤如下。

1.选择菜单“文件”>“新建文件”,打开“新建文件”对话框。

2.在“类别”窗格中选择Java。

3.在“文件类型”窗格中选择“空Java文件”,再单击“下一步”按钮,这将打开“空Java文件”对话框。

4.在文本框“类名”中输入MarsApplication,文本框“创建的文件”中显示了您将创建的文件的名称——MarsApplication.java。

5.单击“完成”按钮。

在NetBeans源代码编辑器中,输入程序清单1.2所示的代码。

程序清单1.2 Mars Application.java的完整源代码

1: class MarsApplication {
2:      public static void main(String[] arguments) {
3:           MarsRobot spirit = new MarsRobot();
4:           spirit.status = "exploring";
5:           spirit.speed = 2;
6:           spirit.temperature = -60;
7:
8:           spirit.showAttributes();
9:           System.out.println("Increasing speed to 3.");
10:          spirit.speed = 3;
11:          spirit.showAttributes();
12:          System.out.println("Changing temperature to -90.");
13:          spirit.temperature = -90;
14:          spirit.showAttributes();
15:          System.out.println("Checking the temperature.");
16:          spirit.checkTemperature();
17:          spirit.showAttributes();
18:      }
19: }

选择菜单“文件”>“保存”,NetBeans将自动把这个文件编译成MarsApplication类,其中包含可供JVM运行的字节码。

在编译或运行程序时如果遇到了问题,可在本书的配套站点www.java21days.com下载源代码和其他相关文件。
编译该应用程序后,可运行它。为此,可选择菜单“运行”>“运行文件”。在NetBeans的“输出”窗口中,将显示MarsApplication类的输出,如图1.1所示。

根据程序清单1.2可知,类方法main( )执行了以下操作。

第2行:创建并命名main( )方法。所有main( )方法的格式都与此相同,这将在第5章介绍。现在,您需要注意的是关键字static,它表明该方法是一个类方法,供所有MarsRobot对象共享。
第3行:使用MarsRobot类为模板创建了一个新的MarsRobot对象。该对象被命名为spirit。
第4~6行:给对象spirit的实例变量赋值——status被设置为exploring,speed为2,temperature为-60。
第8行:在该行及随后的几行中,调用了dante对象的showAttributes( )方法。这个方法显示实例变量status、speed和temperature的当前值。
第9行:在该行和随后的几行中,使用System.out.println( )语句在输出设备(您的显示器)中显示圆括号内的文本。
第10行:将speed实例变量的值设置为3。
第13行:将temperature实例变量的值设置为-90。
第16行:调用spirit对象的checkTemperature( )方法。该方法检查实例变量temperature的值是否小于-80。如果是,则将新的值赋予status和speed。

如果由于某种原因,您不能使用NetBeans来编写Java程序,而必须使用JDK,请参阅附录D和E。附录D介绍了如何安装JDK,而附录E介绍了如何使用JDK来编译和运行Java程序。

时间: 2024-09-22 07:08:57

《21天学通Java(第7版)》—— 1.4 属性和行为的相关文章

《21天学通Java(第6版)》—— 1.5 组织类和类行为

1.5 组织类和类行为 21天学通Java(第6版) Java面向对象编程还涉及另外三个概念:继承.接口和包,这些都是用于组织类和类行为的机制. 1.5.1 继承 继承是面向对象编程中最重要的概念之一,直接影响您如何设计和编写Java类. 继承是一种机制,让一个类能够继承另一个类的所有行为和属性. 通过继承,一个类可自动拥有现有类的所有功能,因此只需定义与现有类不同的地方. 通过继承,所有的类(无论是您创建的类,还是Java类库中的类)都以严格的层次结构来组织. 继承其他类的类叫子类,被继承的类

《21天学通Java(第6版)》—— 2.5 表达式和运算符

2.5 表达式和运算符 21天学通Java(第6版) 表达式是一条能够提供值的语句.最常见的是数学表达式,如下面的例子所示: 这3条语句都是表达式-它们提供了可被赋给变量的值.第1条语句将字面量3赋给变量x.第2条语句将变量x的值赋给变量y.在第3条语句中,乘法运算符*用来将x和y相乘,结果存储在变量z中. 表达式可以是任何变量.字面量和运算符的组合,也可以是方法调用,因为方法能够将一个值返回给调用它的类或对象. 您知道,表达式所提供的值称为返回值.在Java程序中,可将这个值赋给变量或以其他方

《21天学通Java(第6版)》—— 导读

前言 21天学通Java(第6版) 有些革命出其不意地吸引了全世界的眼球.Twitter.Linux操作系统和电视剧<Cupcake Wars>的异军突起颠覆了传统思维模式. 而Java语言的巨大成功却在人们的意料之中.自从Java语言于17年前面世以来,人们就对它充满殷切的期望.当Java融入到Web浏览器时,公众以无比的热情欢迎这种新语言的到来. Sun公司创始人Bill Joy在介绍这种新语言时,毫不掩饰其孤注一掷的心态:"15年来,我们一直力图开发出一种更佳的编程语言和环境,

《21天学通Java(第7版)》—— 2.2 变量和数据类型

2.2 变量和数据类型 在第1章创建的应用程序MarsRobot中,您使用变量来跟踪信息.变量是程序运行时能够存储信息的地方.可在程序的任何地方对其中的值进行修改--因此被称为变量. 要创建变量,必须提供名称并指定它存储的信息类型.还可以在创建变量的同时给它指定初始值. 在Java中,有3种变量:实例变量.类变量和局部变量. 正如第1章中指出的,实例变量用于定义对象的属性. 类变量定义类的属性,适用于类的所有实例. 局部变量用于方法定义乃至方法中更小的语句块中.仅当Java虚拟机执行这些方法或语

《21天学通Java(第6版)》—— 2.4 字面量

2.4 字面量 21天学通Java(第6版) 除变量外,还可以在Java语句中使用字面量.字面量可以是任何直接表示一个值的数字.文本或其他信息. 下面的赋值语句使用了字面量: 其中的字面量2012表示整数值2012.数字.字符和字符串都是字面量.Java有一些特殊类型的字面量,它们表示各种数字.字符.字符串和布尔值. 2.4.1 数字字面量 Java有几种整型字面量.例如,数字4是一个int类型的整型字面量,可将其赋给byte或short类型的变量,因为它足够小,在这些整数类型的取值范围内.位于

《21天学通Java(第6版)》—— 1.10 练习

1.10 练习 21天学通Java(第6版) 为巩固今天介绍的知识,请尝试完成下面的练习. 1.在VolcanoApplication类的main( )方法中,再创建一个名为virgil的VolcanoRobot对象,设置其实例变量,并将它们的值显示出来. 2.为国际象棋中的棋子创建一个继承层次结构,并决定在层次结构的什么位置定义实例变量color.startingPosition.forwardMovement和sideMovement.

《21天学通Java(第6版)》—— 1.4 属性和行为

1.4 属性和行为 21天学通Java(第6版)Java类包含两种不同的信息:属性和行为. 这两者在VolcanoRobot中都有,这是今天将作为类实现的项目.该项目使用计算机模拟火山探测工具,它模仿的是NASA的"遥控机器人研究"计划中用来在火山裂缝中进行研究探测的Dante II机器人. 创建该程序之前,您需要学习一些如何使用Java编写面向对象程序的知识.刚接触时,面向对象概念可能难以理解,但本书将给您提供大量将这些概念付诸实践的机会. 1.4.1 属性 属性(attribute

《21天学通Java(第6版)》—— 第 2 章 Java编程基础

第 2 章 Java编程基础 21天学通Java(第6版)Java程序是由类和对象组成的,而对象和类又是由方法和变量组成的.方法是由语句和表达式组成的,表达式又由运算符组成. 至此,您可能担心Java就像俄罗斯套娃.每个洋娃娃里边都有一个更小的洋娃娃,而后者同前者一样错综复杂. 本章将消除大洋娃娃的困扰,揭示Java编程的最小元素.本章暂时撇开类.对象和方法,介绍单行Java代码中的基本元素. 这包括以下内容: Java语句和表达式:变量和基本数据类型:常量:注释:字面量:算术运算符:比较运算符

《21天学通Java(第6版)》—— 1.7 问与答

1.7 问与答 21天学通Java(第6版)问:实际上,方法是在类中定义的函数.既然它们无论从外观和行为方面都类似于函数,为什么不将它们叫做函数呢? 答:有些面向对象编程语言确实将它们叫做函数(C++将它们叫做成员函数).其他一些面向对象语言将位于类(对象)内.外的函数区分开来,因为在这些语言中,使用不同的术语对理解每个函数的工作原理至关重要.因为其他语言有这种区别,同时术语"方法"在面向对象技术中很常用,所以Java也使用这个术语. 问:实例变量和实例方法同类变量和类方法之间有何区别

《21天学通Java(第6版)》—— 2.9 小测验

2.9 小测验 21天学通Java(第6版)请回答下述3个问题,以复习本章介绍的内容,答案见附录F. 1.下面哪个是合法的布尔值? A."false": B.false: C.10. 2.下面哪条不属于Java的变量命名约定? A.除第一个单词外,变量名中其他单词的首字母都大写: B.变量名的第一个字母小写: C.所有字母都大写. 3.下面哪种数据类型的取值范围为−32768-32767? A.char: B.byte: C.short.