本節書摘來異步社群《21天學通java(第7版)》一書中的第2章,第2.2節,作者: 【美】rogers cadenhead(羅格斯 卡登海德),更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
在第1章建立的應用程式marsrobot中,您使用變量來跟蹤資訊。變量是程式運作時能夠存儲資訊的地方。可在程式的任何地方對其中的值進行修改——是以被稱為變量。
要建立變量,必須提供名稱并指定它存儲的資訊類型。還可以在建立變量的同時給它指定初始值。
在java中,有3種變量:執行個體變量、類變量和局部變量。
正如第1章中指出的,執行個體變量用于定義對象的屬性。
類變量定義類的屬性,适用于類的所有執行個體。
局部變量用于方法定義乃至方法中更小的語句塊中。僅當java虛拟機執行這些方法或語句塊時,它們才被使用,離開方法或塊之後,它們将不複存在。
雖然這3種變量的建立方式極其相似,但在使用方式上,類變量和執行個體變量不同于局部變量。本章介紹局部變量,而執行個體變量和類變量将在第3章介紹。
2.2.1 建立變量
在java程式中使用變量之前必須先建立它——聲明其名稱和存儲的資訊類型。首先指出資訊類型,然後是變量名,下面是一些變量聲明的例子:
int loanlength;
string message;
boolean gameover;
在上述示例中,int類型表示整數,string是用來存儲文本的對象,boolean用來存儲true/false值。
就像其他java語句一樣,局部變量可在方法的任何地方聲明,但必須在使用前聲明。
下面的示例在程式的main()方法開頭聲明了3個變量:
public static void main(string[] arguments) {
}
建立多個類型相同的變量時,可在同一條語句中聲明它們,并用逗号将各個變量分開。下面的語句聲明了3個名為street、city和state的string變量:
string street, city, state;
聲明變量時,可以使用等号給它指派。下面的語句建立新變量并給它們指定初始值:
string zipcode = "02134";
int box = 350;
boolean pbs = true;
string name = "zoom", city = "boston", state = "ma";
正如最後一條語句表明的,可以使用逗号分隔的方式給多個類型相同的變量指派。
對于局部變量,在程式中使用它之前,必須給它指派,否則程式将無法通過編譯。是以,良好的習慣是給所有局部變量指定初始值。
預設情況下,執行個體變量和類變量的初始值取決于其資料類型。
數值變量:0。
字元變量:"0"。
布爾變量:false。
對象:null。
2.2.2 給變量命名
在java中,變量名必須是以字母、下劃線(_)或美元符($)打頭。
變量名不能以數字打頭。在第一個字元之後,變量名可包含任何字母、數字、下劃線和美元符号的組合。
注意
另外,java語言使用unicode字元集,該字元集包括标準字元集,外加幾千個用于表示國際字母的字元。有unicode字元号的重音字元和其他符号也可用于變量名中。
在程式中給變量命名并使用它時,别忘了java是區分大小寫的——字母的大小寫必須一緻。是以,同一個程式中可以有變量x和x,而rose、rose和rose是不同的變量。
在本書或其他地方的程式中,java變量都被賦予一個有意義的名稱,它們由多個單詞組合而成。為友善辨識,可使用下述通用規則:
變量名的第一個字母小寫;
變量名中其他單詞的第一個字母大寫;
其他字母都小寫。
下面的變量聲明遵循了上述命名規則:
button loadfile;
int localareacode;
boolean quitgame;
雖然在變量名中可以使用下劃線,但除非在如下情況下,否則不應使用它:整個變量名都是大寫時,使用下劃線将各個單詞分開,如下所示:
static int days_in_week = 7;
本章後面将介紹要将整個變量名都大寫的原因。
雖然在變量名中可以使用美元符号,但在任何情況下都不應這樣做。java官方文檔建議不要使用它,是以程式員都遵循這種約定。
2.2.3 變量類型
除名稱外,變量聲明還必須包括存儲的資訊類型,這可以是:
基本資料類型,如int或boolean;
類名或接口名;
數組。
關于如何聲明和使用數組變量,将在第4章介紹。本章重點介紹其他變量類型。
1.資料類型
java提供了8種基本資料類型,用于存儲整數、浮點數、字元和布爾值。它們通常被稱為簡單類型(primitive type),因為它們是java内置的而不是對象,這使得它們更容易建立和使用。不管在什麼作業系統和平台上,這些資料類型的長度和特征都相同,這與其他程式設計語言的某些資料類型不同。
用于存儲整數的資料類型有4種,如表2.1所示。具體使用哪種類型取決于要存儲的整數大小。
表2.1 整型
類型
長度(bit)
取值範圍
byte
8
−128~127
short
16
−32768~32767
int
32
−2147483648~2147483647
long
64
−9223372036854775808~9223372036854775807
所有這些類型都是有符号的,這意味着它們既可以存儲正數,也可以存儲負數。給變量指定哪種類型取決于需要存儲的值的範圍。所有這些整型變量都不能正确存儲超出其取值範圍的值,是以在指定類型時一定要小心。
另一種數值是浮點數,其類型為float或double。浮點數是帶小數的數字。float類型的取值範圍為1.4e-45到2.4e+38;double類型的精度更高,其取值範圍為4.9e-324到1.7e+308。鑒于double的精度更高,是以它通常比float更佳。
char類型用于存儲單個字元,如字母、數字、标點和其他符号。
最後一種基本類型是boolean。正如前面介紹過的,其取值為true或false。
所有這些變量類型名都是小寫的,在程式中必須這樣使用它們。存在與這些資料類型名稱相同,但大小寫不同的類,如boolean和double。在java程式中,建立和引用它們的方式不同,是以大多數情況下不能互換。下一章将介紹如何使用這些特殊的類。
如果算上void,java中實際上有9種基本類型。void表示“空”(nothing),用于指出方法不傳回任何值。
2.類的類型
除基本資料類型外,變量的類型還可以是類,如下所示:
string lastname = "hopper";
color hair;
marsrobot robbie;
當變量的類型為類時,它指的是這種類或其子類的一個對象。
在上述代碼中,最後一條語句聲明一個名為robbie的變量,用于存儲mars robot對象。下一章将介紹如何将對象和變量關聯起來。
2.2.4 給變量指派
聲明變量後,可以用指派運算符(=,等号)給它指派。下面是兩個指派語句的例子:
idcode = 8675309;
accountoverdrawn = false;
2.2.5 常量
如果需要存儲在程式運作時可以修改的資訊,使用變量很有用。
對于在程式運作過程中一直不變的值,可以用一種特殊的變量——常量。常量是值保持不變的變量。這裡的“變量”有些用詞不當。
為對象的所有方法定義共享值時,常量很有用。在java中,可以建立各種類型的常量:執行個體常量、類常量和局部常量。
要聲明常量,可在變量聲明前加上關鍵字final,并指定初始值,如下所示:
final double pi = 3.141592;
final boolean debug = false;
final int penalty = 25;
可使用常量來表示對象的不同狀态,然後測試這些狀态。假設有一個這樣的程式,它直接從數字鍵盤讀取方向輸入——8表示向上,4表示向左,6表示向右,2表示向下等,則您可以将這些值定義為整型常量:
final int left = 4;
final int right = 6;
final int up = 8;
final int down = 2;
常量讓程式更容易了解。為了說明這一點,請看下面哪條語句更清楚地說明了其功能:
guide.direction = 4;
guide.direction = left;
在上述語句中,常量名都為大寫,如debug和left。java程式員都這樣做,以表明這是常量而不是變量;雖然java并未要求常量名必須大寫,但您最好遵循這種做法。
常量名由多個單詞組成時,将整個常量名都大寫将導緻各個單詞難以區分開來,如escapecode。在這種情況下,應使用下劃線将各個單詞分開,如下所示:
final int escape_code = 27;
本章要介紹的第一個項目是一個這樣的java應用程式:建立多個變量,給它們賦初始值,然後顯示其中兩個變量的值。請啟動netbeans,并按如下步驟建立一個java程式(其中有個步驟與第1章不同)。
1.選擇菜單“檔案”>“建立檔案”打開“建立檔案”對話框。
2.在“類别”窗格中選擇java。
3.在“檔案類型”窗格中選擇“空java檔案”,再單擊“下一步”按鈕,這将打開“空java檔案”對話框。
4.在文本框“類名”中輸入variables,這将把源代碼檔案命名為variables.java。
5.在文本框“包”中輸入com.java21days(這就是與前一章不同的步驟)。
6.單擊“完成”按鈕。
在這裡,您指定了類名和包名。包用于将相關的java程式放在一起,類似于檔案系統中的檔案夾。在源代碼編輯器中,輸入程式清單2.1所示的代碼。
程式清單2.1 variables.java的完整源代碼
1: package com.java21days;
2:
3: public class variables {
4:
5: public static void main(string[] arguments) {
6: final char up = 'u';
7: byte initiallevel = 12;
8: short location = 13250;
9: int score = 3500100;
10: boolean newgame = true;
11:
12: system.out.println("level: " + initiallevel);
13: system.out.println("up: " + up);
14: }
15: }
選擇菜單“檔案”>“儲存”将該檔案存盤。netbeans将自動編譯該應用程式——如果沒有錯誤。選擇菜單“運作”>“運作檔案”以運作該程式,其輸出如圖2.1所示。
....16-0940yds排版16-0940yds排版21天學通java(第7版) a20151938螢幕截圖ch022.1.tif{}
圖2.1 建立變量并顯示它們的值
類所屬的包是使用package語句指定的,這種語句必須位于類的最前面:
package com.java21days;
這個類使用了4個局部變量和1個常量,并在第12~13行使用system.out.println()來生成輸出。
system.out.println()是一個用于将字元串和其他資訊顯示到标準輸出裝置(通常是顯示器)上的方法。
這個方法接收一個參數:一個字元串。為了将多個變量或字面值作為println( )的參數,使用運算符+将它們合并成一個字元串。
java還提供了方法system.out.print(),它不在字元串後回車。要在同一行顯示多個字元串,可連續調用方法print(),而不是println()。