本节书摘来异步社区《21天学通Java(第6版)》一书中的第1章,第1.4节,作者:【美】Rogers Cadenhead,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.4 属性和行为

21天学通Java(第6版)
Java类包含两种不同的信息:属性和行为。

这两者在VolcanoRobot中都有,这是今天将作为类实现的项目。该项目使用计算机模拟火山探测工具,它模仿的是NASA的“遥控机器人研究”计划中用来在火山裂缝中进行研究探测的Dante II机器人。

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

1.4.1 属性

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

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

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

实例变量(instance variable)定义了特定对象的属性。对象的类定义了属性的类型,每个实例都存储了自己的属性值。实例变量也叫做对象变量(object variable)。

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

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

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

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

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

在VolcanoRobot类中,存储当前时间的变量就是一个类变量。如果使用实例变量来存储当前时间,则在每个对象中,该变量的值都可能不同。这样,如果这些机器人要协同完成某项任务,就可能出现问题。

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

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

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

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

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

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

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

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

1.4.3 创建类

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

注意该程序的主旨是探索面向对象编程。有关Java编程语法的更详细的信息,请参阅第2章。

NetBeans将Java类组织成项目。使用项目来存储您在本书创建的类很有帮助。如果您还没有创建项目,现在就这样做。

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

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

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

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

5.单击“完成”按钮。

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

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

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

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

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

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

5.单击“完成”按钮。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

使用VolcanoRobot类的方式有两种:

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

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

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

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

选择菜单“文件”>“保存”,NetBeans将把这个文件编译成VolacanoApplication类,其中包含可供Java虚拟机运行的字节码。

编译该应用程序后,可运行它。为此,可选择菜单“运行”>“运行文件”。在NetBeans的“输出”窗口中,将显示VolacanoApplication类的输出,如图1.2所示。

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

  • 第2行:创建并命名main( )方法。所有main( )方法的格式都与此相同,这将在第5章介绍。现在,您需要注意的是关键字static,它表明该方法是一个类方法,供所有VolcanoRobot对象共享。
  • 第3行:使用VolcanoRobot类为模板创建了一个新的VolcanoRobot对象。该对象被命名为dante。
  • 第4~6行:给对象dante的实例变量赋值—status被设置为exploring,speed为2,temperature为510。
  • 第8行:在该行及随后的几行中,调用了dante对象的showAttributes( )方法。这个方法显示实例变量status、speed和temperature的当前值。
  • 第9行:在该行和随后的几行中,使用System.out.println( )语句来显示圆括号内的文本。
  • 第10行:将speed实例变量的值设置为3。
  • 第13行:将temperature实例变量的值设置为670。
  • 第16行:调用dante对象的checkTemperature( )方法。该方法检查实例变量temperature的值是否大于660。如果是,则将新的值赋予status和speed。
    注意如果由于某种原因,您不能使用NetBeans来编写Java程序,而必须使用JDK,请参阅附录D和E。附录D介绍了如何安装JDK,而附录E介绍了如何使用JDK来编译和运行Java程序。

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

  1. 21天学通java第7版pdf_21天学通Java.第7版.pdf

    <21天学通Java(第7版)>是初学者学习Java编程语言的畅销经典教程,循序渐进地介绍了Java编程语言知识,并提供了丰富的实例和练习:同时全面涵盖了Java 8这一新标准以及与And ...

  2. 《21天学通Java(第7版)》—— 第2章 Java编程基础 2.1 语句和表达式

    本节书摘来异步社区<21天学通Java(第7版)>一书中的第2章,第2.1节,作者: [美]Rogers Cadenhead(罗格斯 卡登海德),更多章节内容可以访问云栖社区"异 ...

  3. 21天学通Java学习笔记-Day01

    21天学通java 中文第6版 下载地址:点击打开链接 Day01: 命令行查看和设置classpath: 查看:echo %classpath% 设置:set classpath = %classp ...

  4. 21day学通python epub_21天就让你掌握Python语言,《21天学通Python》PDF版送给你去学...

    Python的学习书籍小编看过很多,但是这本<21天学通Python>真的是堪称极品! 本书的作者团队成员为一线开发工程师.资深编程专家或专业培训师,在编程开发方面有着丰富的经验,并已出版 ...

  5. ole2高级编程技术 pdf_21天快速掌握Python语言,《21天学通Python》PDF版送给你去学...

    Python的学习书籍小编看过很多,但是这本<21天学通Python>真的是堪称极品! 本书的作者团队成员为一线开发工程师.资深编程专家或专业培训师,在编程开发方面有着丰富的经验,并已出版 ...

  6. 21天学通Java学习笔记-Day12(MYsql-JDBC)

    JDBC MYQL 基础: 用命令行进入MYSQL:shell > mysql -h host(主机) -u user(用户名) -p 回车,等待输入密码 退出MYSQL:mysql >  ...

  7. 21天学通java 3_《21天学通Java》PDF 下载

    第一篇  基 础 篇 第1章  Java简介 1.1  Java的平台简介 1.2  安装工具包 1.3  程序开发过程 1.4  编码规范 1.5  HelloWorld:第一个Java程序 1.6 ...

  8. 21天学通Java学习笔记-Day04

    Day04: 静态数组是一组对象,每个元素都是一个对象,所以用 new 创建新的数组实例. class test{public static void main(String[]args){a[] a ...

  9. 21天学通Java学习笔记-Day02

    Day02: java 程序是由 类,对象 组成.对象和类是由 方法,变量组成.方法是由 语句,表达式 组成.表达式是由 运算符 组成. 3种变量: 实例变量:定义对象的属性. 类 变 量 : 定义类 ...

最新文章

  1. 一个可以实现图片格式相互转化的工具convert_picture.exe
  2. ThinkPHP学习笔记 事务处理
  3. 第四章 数据库和SQL 4-3 数据的更新(UPDATE语句的使用方法)
  4. bootstrap4导航栏点击弹出表单_Bootstrap4从入门到精通
  5. ZZ:new/delete 和malloc/free 的区别
  6. python 线程死锁_python线程死锁与递归锁
  7. PostgreSQL学习笔记3之表的继承和分区
  8. 基于APPIUM的移动自动化测试
  9. c语言goord函数,park、unpark、ord 函数使用方法(转)
  10. 真正的创业者和伪创业者的区别在哪里?
  11. js 小数自动补0_JS自定义保留小数,并支持补零(四舍五入)
  12. 自定义View之HenCoder学习笔记
  13. STM32 CAN通信协议详解—小白入门(一)
  14. 【动画消消乐】HTML+CSS 自定义加载动画 053
  15. 51单片机 Proteus仿真 身高体重测量 HX711 超声波SR-04
  16. 深度学习入门(五) softmax回归
  17. element-ui的upload 上传组件 照片墙当超过限定图片后隐藏上传按钮
  18. 浅谈简单快捷的服务器——私有云服务器!
  19. html5 canvas消除锯齿,HTML5 Canvas笔划没有消除锯齿
  20. 安卓进阶之android系统架构

热门文章

  1. DTSOFT Virtual CDRom Device
  2. Java修炼之凡界篇 筑基期 第04卷 方法 第01话 什么是方法
  3. 给还没毕业的同学的衷心告诫[转]
  4. 【Opencv实战】素描,要画出感觉,比如像这样画:画啥啥都好看(建议保存)
  5. Python爬取新闻动态评论
  6. 挂载SD卡到mnt目录
  7. 2021PHP框架最新性能压力测试比较 php框架如何选择
  8. SpingBoot加解密项目spring-boot-starter-encrypt操作
  9. Camtasia studio编辑、合成视频和音频——自用
  10. 百度袁佛玉与马修·鲍尔精彩对谈:中国最有可能构建理想中的元宇宙