## Java編程那些事兒18——變量和常量
作者:陳躍峰
出自:[http://blog.csdn.net/mailbomb](http://blog.csdn.net/mailbomb)
**3.6 變量和常量**
在程序中存在大量的數據來代表程序的狀態,其中有些數據在程序的運行過程中值會發生改變,有些數據在程序運行過程中值不能發生改變,這些數據在程序中分別被叫做變量和常量。
在實際的程序中,可以根據數據在程序運行中是否發生改變,來選擇應該是使用變量代表還是常量代表。
**3.6.1 變量**
變量代表程序的狀態。程序通過改變變量的值來改變整個程序的狀態,或者說得更大一些,也就是實現程序的功能邏輯。
為了方便的引用變量的值,在程序中需要為變量設定一個名稱,這就是變量名。例如在2D游戲程序中,需要代表人物的位置,則需要2個變量,一個是x坐標,一個是y坐標,在程序運行過程中,這兩個變量的值會發生改變。
由于Java語言是一種強類型的語言,所以變量在使用以前必須首先聲明,在程序中聲明變量的語法格式如下:
數據類型 變量名稱;
例如:int x;
在該語法格式中,數據類型可以是Java語言中任意的類型,包括前面介紹到的基本數據類型以及后續將要介紹的復合數據類型。變量名稱是該變量的標識符,需要符合標識符的命名規則,在實際使用中,該名稱一般和變量的用途對應,這樣便于程序的閱讀。數據類型和變量名稱之間使用空格進行間隔,空格的個數不限,但是至少需要1個。語句使用“;”作為結束。
也可以在聲明變量的同時,設定該變量的值,語法格式如下:
數據類型 變量名稱 = 值;
例如:int x = 10;
在該語法格式中,前面的語法和上面介紹的內容一致,后續的“=”代表賦值,其中的“值”代表具體的數據。在該語法格式中,要求值的類型需要和聲明變量的數據類型一致。
也可以一次聲明多個相同類型的變量,語法格式如下:
數據類型 變量名稱1,變量名稱2,…變量名稱n;
例如:int x,y,z;
在該語法格式中,變量名之間使用“,”分隔,這里的變量名稱可以有任意多個。
也可以在聲明多個變量時對變量進行賦值,語法格式如下:
數據類型 變量名稱1=值1,變量名稱2=值2,…變量名稱n=值n;
例如:int x = 10,y=20,z=40;
也可以在聲明變量時,有選擇的進行賦值,例如:int x,y=10,z;
以上語法格式中,如果同時聲明多個變量,則要求這些變量的類型必須相同,如果聲明的變量類型不同,則只需要分開聲明即可,例如:
int n = 3;
boolean b = true;
char c;
在程序中,變量的值代表程序的狀態,在程序中可以通過變量名稱來引用變量中存儲的值,也可以為變量重新賦值。例如:
int n = 5;
n = 10;
在實際開發過程中,需要聲明什么類型的變量,需要聲明多少個變量,需要為變量賦什么數值,都根據程序邏輯決定,這里列舉的只是表達的格式而已。
**3.6.2 常量**
常量代表程序運行過程中不能改變的值。
常量在程序運行過程中主要有2個作用:
1.?代表常數,便于程序的修改
2.?增強程序的可讀性
常量的語法格式和變量類型,只需要在變量的語法格式前面添加關鍵字final即可。在Java編碼規范中,要求常量名必須大寫。
則常量的語法格式如下:
final 數據類型 常量名稱 = 值;
final 數據類型常量名稱1 = 值1, 常量名稱2 = 值2,……常量名稱n = 值n;
例如:
final double PI = 3.14;
final char MALE=’M’,FEMALE=’F’;
在Java語法中,常量也可以首先聲明,然后再進行賦值,但是只能賦值一次,示例代碼如下:
final int UP;
UP = 1;
常量的兩種用途對應的示例代碼分別如下:
1.?代表常數
final double PI = 3.14;
int r =5;
double l = 2 * PI * r;
double s = PI * r * r;
在該示例代碼中,常量PI代表數學上的∏值,也就是圓周率,這個是數學上的常數,后續的變量r代表半徑,l代表圓的周長,s代表圓的面積。
則如果需要增加程序計算時的精度,則只需要修改PI的值3.14為3.1415926,重新編譯程序,則后續的數值自動發生改變,這樣使代碼容易修改,便于維護。
2.?增強程序的可讀性
int direction;
final int UP = 1;
final int DOWN = 2;
final int LEFT = 3;
final int RIGHT = 4;
在該示例代碼中,變量direction代表方向的值,后續的四個常量UP、DOWN、LEFT和RIGHT分辨代表上下左右,其數值分別是1、2、3和4,這樣在程序閱讀時,可以提高程序的可讀性。
**3.6.3 語句塊**
在程序中,使用一對大括號{}包含的內容叫做語句塊,語句塊之間可以互相嵌套,嵌套的層次沒有限制,例如:
~~~
?????????????????? {
??????????????????????????? int a;
?????????????????? }
???????? 語句塊的嵌套:
?????????????????? {
??????????????????????????? int b;
??????????????????????????? {
???????????????????????????????????? char c;
??????????????????????????? }
?????????????????? }
~~~
以上代碼只是演示語法,沒有什么邏輯意義。在后續的語法介紹中,還會有語句塊的概念,就不再重復介紹了。
**3.6.4 變量的作用范圍**
每個變量都有特定的作用范圍,也叫做有效范圍或作用域,只能在該范圍內使用該變量,否則將提示語法錯誤。通常情況下,在一個作用范圍內部,不能聲明名稱相同的變量。
變量的作用范圍指從變量聲明的位置開始,一直到變量聲明所在的語句塊結束的大括號為止。例如以下代碼:
~~~
???????? ???????? {
???????? ???????? ???????? {
???????? ?????????????????? ???????? int a = 10;
??????????????????????????? ???????? a = 2;
?????????????????? ???????? }
?????????????????? ???????? char c;
?????????????????? }
~~~
在該代碼中,變量a的作用范圍即從第三行到第五行,變量c的作用范圍即從第六行到第七行。
**3.6.5 常量的作用范圍**
常量的作用范圍和變量的作用范圍規則完全一致。
**3.6.6 總結**
對于變量和常量的內容就介紹這么,下面是一個完整的代碼,可以在JDK或Eclipse中進行編譯和運行。代碼文件名為VariableAndConst.java,示例代碼如下:
~~~
???????? public class VariableAndConst{
???????? ???????? public static void main(String[] args){
??????????????????????????? int n = 0;
??????????????????????????? char c = ‘A’;
??????????????????????????? System.out.println(n);
??????????????????????????? n = 10;
??????????????????????????? System.out.println(n);
??????????????????????????? System.out.println(c);
?????????????????? }
???????? }
~~~
說明:在該代碼中,System.out.println的功能是輸出變量中存儲的值。
- 前言
- (1)序言
- (2)程序設計是什么?
- (3)你適合學習程序設計嗎?
- (4)如何學好程序設計?
- (5)程序設計介紹小結
- (6)計算機軟件基本概念
- (7)進制的概念
- (8)計算機內部的數據表達
- (9)網絡編程基礎
- (10)Java語言簡介
- (11)JDK的獲得、安裝和配置
- (12)第一個HelloWorld程序
- (13)Eclipse基本使用
- (14)Eclipse基礎使用進階
- (15)如何學好Java語法
- (16)代碼框架、關鍵字和標識符
- (17)基本數據類型
- (18)變量和常量
- (19)數據類型轉換
- (20)空白、語句結束和注釋
- (21)算術運算符
- (22)比較運算符
- (23)邏輯運算符
- (24)賦值運算符
- (25)位運算符
- (26)移位運算符
- (27)其它運算符
- (28)運算符優先級
- (29)表達式
- (30)流程控制基礎
- (31)if語句語法(1)
- (32)if語句語法(2)
- (33)if語句語法(3)
- (34)switch語句語法
- (35)while語句語法
- (36)do-while語句語法
- (37)for語句語法
- (38)break和continue語句
- (39)流程控制綜合示例1
- (40)流程控制綜合示例2
- (41)流程控制綜合示例3
- (42)流程控制綜合練習
- (43)數組概述
- (44)數組基礎語法
- (45)數組使用示例1
- (46)數組使用示例2
- (47)數組使用示例3
- (48)多維數組基礎
- (49)多維數組使用示例1
- (50)多維數組使用示例2
- (51)多維數組練習
- (52)方法聲明
- (53)方法聲明示例
- (54)方法調用
- (55)方法重載和參數傳遞
- (56)方法練習
- (57)面向對象基礎
- (58)類(一)
- (59)類(二)
- (60)對象
- (61)面向對象設計方法和面向對象特性(一)
- (62)繼承(二)
- (63)多態性
- (64)訪問控制符、修飾符和其它關鍵字
- (65)static修飾符
- (66)final修飾符
- (67)this和super
- (68)抽象類和接口(一)
- (69)抽象類和接口(二)
- (70)抽象類和接口(三)
- (71)內部類簡介
- (72)包的概念
- (73)JDK文檔使用
- (74)java.lang包介紹1
- (75)String類使用
- (76)StringBuffer類和System類
- (77)包裝類
- (78)時間和日期處理
- (79)Random隨機處理
- (80)集合框架簡述
- (81)異常處理概述
- (82)異常處理語法1
- (83)異常處理語法2
- (84)IO簡介
- (85)IO類體系
- (86)文件操作之File類使用
- (87)文件操作之讀取文件
- (88)文件操作之寫文件
- (89)讀取控制臺輸入
- (90)裝飾流使用1
- (91)裝飾流使用2
- (92)IO使用注意問題
- (93)多線程基礎
- (94)多線程實現方式1
- (95)多線程實現方式2
- (96)多線程使用示例1
- (97)多線程使用示例2
- (98)多線程問題及處理1
- (99)多線程問題及處理2
- (100)多線程問題及處理3
- (101)網絡編程概述
- (102)網絡編程技術1
- (103)網絡編程技術2
- (104)網絡編程技術3
- (105)網絡編程技術4
- (106)網絡編程技術5
- (107)網絡協議概念
- (108)網絡編程示例1
- (109)網絡編程示例2
- (110)網絡編程小結