
3-1 认识变量
假设到麦当劳打工,一小时可以获得120元,现在要计算一天工作8小时,可以获得多少工资?可以用计算器执行“120×8”,然后得到执行结果。
如果一年实际工作天数是300天,可以用“120×8×300”方式计算一年所得。如果一个月的花费是9000元,可以用下列方式计算一年可以存多少钱。

虽然以上公式可以运行,但是已经显得有些复杂了,特别是如果过几天再看上述表达式,可能已经忘记上述公式的意义了。同时,如果时薪由120元调整到125元,上述整个运算又将重新开始,非常不便。
变量是一个暂时存储数据的地方,为了让程序清晰易懂,建议使用变量记录每一段落的执行过程,这将是本节的重点。
3-1-1 变量的声明
Java语言变量在使用前需要声明,可以在程序中任意地方声明变量然后使用。3-2节中将讲解Java数据类型,在此先说明最简单的数据整数(int)。声明整数变量x的语法如下。

经过上述声明后,相当于内存内有一个变量x的空间。

变量声明完成后,在Java中可以用“=”设置变量的内容。在这个实例中,建立了一个变量x,假设时薪是120,可以用下列方式设置时薪。

经过上述设置后,相当于内存内有一个变量x的空间内容是120。

程序实例ch3_1.java:时薪是120元,一天工作8小时,一年工作300天,请计算一年可以赚多少钱,用变量z存储一年所赚的钱。

执行结果

上述第7行中的“+”号是字符串连接运算符,可以将“一年可以赚 :”字符串与变量x连接起来输出。
程序实例ch3_2. java:延续实例ch3_1. java,如果每个月花费是9000元,用变量y存储一年所花的钱,用变量s存储一年可以存多少钱。

执行结果

在声明变量时,可以在同一行内声明多个变量,各变量间用逗号隔开。
程序实例ch3_3.java:使用同一行内声明多个变量的方式重新设计ch3_2.java,第3行设置了4个变量,各变量间用逗号隔开。

执行结果
与ch3_2.java相同,程序设计时也可以为了让程序容易阅读,自行空行,可参考第4行。
设置变量时也可以直接设置变量的内容。
程序实例ch3_4.java:设置变量时也可以直接设置变量的内容,重新设计ch3_3.java,可以参考第3行。

执行结果
与ch3_3.java相同。
3-1-2 设置有意义的变量名称
通过上述实例我们很顺利地使用Java计算了每年可以存多少钱,可是上述实例使用Java做运算潜藏的最大问题是,只要过了一段时间,我们可能忘记当初所有设置的变量代表什么意义。因此在设计程序时,如果可以为变量取个有意义的名称,以后看到程序时,可以比较容易记得。下面是重新设计的变量名称。
时薪:hourly_salary,每小时的薪资。
年薪:annual_salary,一年工作所赚的钱。
月支出:monthly_fee,每个月的花费。
年支出:annual_fee,每年的花费。
年储存:annual_savings,每年所存的钱。
程序实例ch3_5.java:用有意义的变量名称重新设计ch3_4.java。

执行结果
与ch3_4.java相同。
相信经过上述说明,读者应该了解变量的基本意义了。
3-1-3 了解注释的意义
ch3_5.java中已经为变量设置了有意义的名称,但时间一久,常常还是会忘记各条命令的内涵。所以笔者建议,设计程序时,应适度地为程序代码加上注释。在2-3节已经讲解过注释的方法,下面将直接以实例说明。
程序实例ch3_6.java:重新设计程序ch3_5.java,为程序代码加上注释。

执行结果
与ch3_5.java相同。
相信经过上述注释后,即使再过10年,只要一看到程序即可轻松了解整个程序的意义。
3-1-4 变量的命名规则
Java对于变量的命名和使用有一些规则要遵守,否则会造成程序错误。
(1)必须由英文字母、_(下画线)或$字符开头,建议以英文字母开头。虽然可以使用$字符开头,不过建议不要用,因为容易和Java编译程序产生的变量混淆。
(2)变量名称只能由英文字母、数字、_(下画线)所组成。
(3)变量的长度没有限制。
(4)英文字母大小写是敏感的,例如,Name与name被视为不同的变量名称。
(5)可以使用Unicode为变量命名,例如,使用中文字当作变量。
(6)Java 系统保留字(或称关键词)不可当作变量名称。
下列是不可当作变量名称的Java 系统保留字。

实例1:下列是一些不合法的变量名称。

实例2:下列是一些合法的变量名称。

实例3:下列三个变量代表不同的变量。

由于Java可以用Unicode,所以可以用中文当变量名称,不过程序设计时不鼓励使用中文当变量名称。
程序实例ch3_7.java:使用中文命名变量,可参考下列程序第3行。

执行结果
