课程导言
【在上节课给出了求长方形面积算法的流程图。流程图的第一个处理流程是声明num1、num2、result三个变量,初学者可能对这三个英文串以及变量这个词语所表达的意义不明白或感到困惑,编写程序更不知道如何入手了,俗话说,难着不会,会者不难,赶快学习本课内容就知道它们所表达的意义了。本节课将揭开算法步骤中英文串和变量的神秘面纱,了解变量的声明和使用方法。通过本课的学习,可以掌握变量的作用、声明和使用。】
求长方形面积算法需要用户输入长度和宽度,输入完毕,用户按下回车键(Enter)后,程序需要存储用户输入的长度和宽度,其响应用户输入的场景如下图所示:
图1 用户输入场景
从上图可以看出,程序内部需要存储用户输入的长度和宽度,为计算面积提供长度和宽度值。那么,用户输入的数据是如何存储的呢?其实程序存储数据有两种方式,一种方法是将数据存储到数据库、文件等载体,该存储方式称为长期或永久存储。另外一种方法是将数据临时存储到计算机内存储器存储单元中,把该存储单元的地址用一个容易记忆的名称来表示,程序可通过名称来访问该存储单元存储的内容。
从求长方形面积算法的步骤可知,程序需要三个存储器的存储单元,用来存储长方形的长度、宽度和面积。为了方便记忆和使用这三个存储单元,给这三个存储单元分别命名为num1、num2、result,num1用来存储长方形的长度,num2用来存储长方形的宽度,result用来存储长方形的面积。
图2 存储单元示意图
上图是num1、num2、result在计算机存储器的位置示意图,可以看出num1、num2、result各占一个存储单元。那么,一个存储单元能存储多大的数值呢?我们知道,计算机中的数据都是以二进制方式存储的,一般来说每个存储单元为8个二进制位,也称为一个字节,每个字节所能表示的最大数值为2的8次方,也就是255。如果该存储单元要表示正负数的话,还需要最高位作为符号位,剩余的7位用来表示数值,此时可表示的最大数值为2的7次方,也就是127。
一个存储单元表示的数值太小了,不满足求长方形面积算法要求。计算机能不能存储更大数值的数呢?当然可以了。只要把连续的存储单元作为一个数值的存储区域就可以了。例如,把连续的4个存储单元用来存储一个数值,4个存储单元就是32个二进制位,这个数值所能表示的最大值为2的31次方,另外1位是符号位,也就是2147483647,在Java语言中,这4个连续存储单元存储的数值被定义为int类型,int类型的存储结构如下图所示。
图3 int类型存储结构示意图
从上图可以看出,num1占了4个字节的存储空间,num1指向该连续存储单元的第一个单元地址。Java语言还定义了其它数值类型,每个数值类型所占用的连续存储单元并不相同。例如byte占一个字节、short占2个字节、int占4个字节。因此在使用存储单元存储数值时,要给出所存储数据的数据类型,计算机会按照给出数据类型分配存储单元。
在Java语言中,类似于num1、num2、result这样的名称也被称为标识符,用来标识存储单元的标识符称为变量。标识符也用于标识类名、方法名。在java语言中使用标识符,必须遵循一定的规则。
① 可以由字母(大写A—Z或小写a—z)、数字(0—9)和_(下划线)组合而成,但不能由数字开头;
② 不能包含除_以外的任何特殊字符,如:%、#、&、逗号、空格等;
③ 不能包含空白字符(换行符、空格和制表符称为空白字符);
④ 标识符不能是Java语言的关键字和保留字,例如class、void、int等关键字;
⑤ 标识符区分大小写,num1和Num2是两个不同的标识符。
⑥ 标识符的命名要有意义,做到见名知意。
下面是正确的标识符命名示例:
width、height、book、result、num、num1、num2、book_price
下面是错误的标识符的命名示例:
123rate(以数字开头)、Book Author(包含空格)、Address#(包含特殊字符)、class(calss是Java关键字)
前面讲了这么多,终于讲到变量了。用标识符命名的存储单元的地址称为变量,变量是用来存储数据的,通过标识符可以获取变量的值,也可以对变量进行赋值。对变量赋值的意思是将值赋给变量,赋值完成后,变量所指向的存储单元存储了被赋的值,在Java语言中赋值操作符为“=”。
当程序使用变量存储数据时,必须要先声明变量,然后才能使用。声明变量的语法如下:
type identifier [ = value][, identifier [= value] ...] ;
其中,type是Java数据类型,例如前面的int。identifier是标识符,也是变量名称,可以声明多个变量,每个标识符之间用英文逗号隔开。value为变量的值,该项为可选项,可以在变量声明时给变量赋值,也可以不赋值。
下面是正确的变量声明示例:
① int result;
② int width,height;
下面是错误的变量声明示例:
① result;
② int width height;
第①个变量声明的错误在于缺少变量类型,第②个变量声明的错误在于声明的两个变量width和height没有用英文逗号隔开。
在声明变量的同时,可以对变量赋值,也称为变量的初始化。变量如果在声明时没有被赋值,则应该在后面的程序中为变量赋值。
下面是声明变量并给变量赋值的示例:
① int result = 30;
② int width=120,height=80;
在上面的语句中,① 声明了int类型的result变量,并将数值30赋值给result变量;② 声明了width和height两个变量,并分别将数值120赋值给width,数值80赋值给height。
下面是为已声明的变量赋值的示例:
int result;
result = 30;
在上面的语句中,第一条语句声明了变量result,在第二条语句中将30赋值给result。
变量弄清楚后,可以回到求长方形面积算法的问题了,算法的第一个步骤是声明num1、num2、result三个变量,用代码实现该步骤:
int num1,num2,result;
看,学会了变量的使用,是不是很容易就把算法的第一个步骤用代码写出来了!
■ 课程小结
1、程序在运行过程中,需要存储一些中间数据。例如用程序求长方形面积时,就需要存储长方形的长度、宽度和计算结果。这些中间数据存储到已经被命名的存储单元中,这些被命名的存储单元称之为变量。
2、标识符用于Java程序中变量、类名、方法等命名的符号,变量名称就是一类标识符,使用标识符必须遵循一定的规范。
3、在程序使用变量前,必须要先声明变量。因为计算机要给声明的变量分配存储单元,因此声明变量时,必须给出数据类型,计算机会按照给出的数据类型决定分配多少个存储单元。例如,声明一个int类型变量时,计算机会分配4个存储单元给声明的变量。
4、变量可以在声明时被赋值,也可以在程序运行过程中被赋值。
■ 思考与练习
1、变量为什么不能随意命名?
2、声明一个int类型的变量,在Java语言中大约占多少个存储单元?
3、在程序运行过程中,可以修改变量的值吗?
举报/反馈