上一篇文章介紹了Java工程的帝國區劃,末尾給出了一段Java代碼例子,這個代碼雖然勉強能看懂,但是有些細節令人不甚了了。比如說“// 參觀朱雀台”為何能夠直接跟在當前行後面?“System.out.println”又為何被點號繞了三道灣?顯然這裡面必定有一些規則需要遵守,好比到了一個國家就要入鄉隨 ...
上一篇文章介紹了Java工程的帝國區劃,末尾給出了一段Java代碼例子,這個代碼雖然勉強能看懂,但是有些細節令人不甚了了。比如說“// 參觀朱雀台”為何能夠直接跟在當前行後面?“System.out.println”又為何被點號繞了三道灣?顯然這裡面必定有一些規則需要遵守,好比到了一個國家就要入鄉隨俗,為了方便游客更好更快地適應當地的風俗,Java帝國特別設立了幾個特殊官職,專門負責對內對外打交道的事情。其中有幾個官吏經常露面,尤其需要初學者註意,他們是:翻譯官、太史公、貿易官,接下來分別介紹如何與它們打招呼。
翻譯官
Java代碼其實由一行一行的符號組成,跟通俗易懂的自然語言沒法比,因為Java只是一種電腦編程的高級語言,它的代碼邏輯是給電腦看的,不是給普通人看的,所以初學者不要指望馬上就能看懂Java代碼。到了異國他鄉,面對周圍的鳥語嘰喳,啥都聽不懂可不是辦法,最好能找個翻譯,把這群老外說的鳥語翻譯成你我熟知的母語,這樣才好待下來學習和生活。Java帝國裡面也有類似的翻譯官,大名叫做“註釋”,意思就是在代碼里添加一行或者一段說明性的文字,這些說明文字對程式運行不起任何作用,僅僅是方便初學者理解Java代碼的功能作用。
像前面代碼裡面的“// 參觀朱雀台”,開頭的兩個雙斜桿“//”便是註釋的標記符號,它表示當前行在雙斜桿之後的內容都屬於註釋文字,可以隨便寫開發者的母語文本,反正不會影響Java程式的編譯和運行。雙斜桿的註釋規則有兩條,其一為:它只註釋後面的文字,不註釋前面的文字;其二為:它只對當前行有效,對上一行和下一行都是無效的。因此,如果要添加多行的說明文字,就得在每行文字開頭都加上雙斜桿符號。下麵是給Java代碼添加多行註釋的例子:
// 先參觀朱雀台 // 再參觀金虎台 // 最後參觀冰井台
然而每行文字前面都要開發者手工輸入雙斜桿,實在是有點興師動眾,為減少開發者的工作量,有兩個辦法可以避免重覆的手工輸入。第一個辦法,先用滑鼠選中需要註釋的數行文本,再依次選擇Eclipse頂部菜單的“Source”→“Toogle Comment”,此時Eclipse瞬間在這幾行文字開頭都加上了雙斜桿。第二個辦法,是採用Java代碼的多行註釋標記,這個多行註釋,需要一個標記頭和一個標記尾,那麼夾在頭尾標記中間的文字,即為被註釋了的文本內容了。所謂的標記頭,由符號“/*”組成,而標記尾則由符號“*/”組成,二者之間可以有單行文字,也可以有多行文字。如果頭尾標記包括註釋文字都在同一行,那麼該行的完整註釋形如“/* 這裡是註釋文字 */”。如果頭尾標記連同註釋文字分散成多行排列,那麼完整的多行註釋格式是下麵這種形式:
/* 先參觀朱雀台 再參觀金虎台 最後參觀冰井台 */
註釋標記與說明文本之間的空格沒有實際意義,僅僅是看過去顯得不那麼擁擠罷了。由於雙斜桿表達的註釋一般言簡意賅,不會太啰嗦,因此本系列的文章主要採取雙斜桿對說明文字加以註釋。
太史公
程式員寫完代碼之後,運行程式之時經常要檢查運行過程是否符合預期,這就要求程式能夠自動彙報運行情況,以便開發者事後分析整個運行過程的經過。或者說,小到一個人每天寫日記,大到一個國家編史書,總之該工作好比史官(又稱太史公)辛勤地記載各類史實,電腦程式的史料學名就稱作“日誌”。程式把自身的運行信息輸出到控制台(Console視窗)或者輸出到文件中,便構成了程式的運行日誌。最簡單的日誌輸出代碼如下所示:
System.out.println("歡迎來到魏國的都城——鄴城。");
從以上代碼可見,輸出日誌的方法是“System.out.println”,最前面的System表示這裡在進行系統操作,中間的out表示向控制台輸出信息;最後面的println表示列印括弧內的文本,並跳到下麵一行,末尾的ln是line的縮寫。如果把最後面的println改成print,那麼列印完括弧內的文本之後,當前定位在該行文本的末尾,而不會跳到下一行的開頭。下麵演示看看println和print區別,先用System.out.println列印兩句話,代碼示例如下:
System.out.println("歡迎來到魏國的都城——鄴城。"); System.out.println("這裡是鄴城的正南門——鳳陽門。");
此時控制台輸出的日誌信息如下圖所示:
再用System.out.print列印同樣的兩句話,代碼示例如下:
System.out.print("歡迎來到魏國的都城——鄴城。"); System.out.print("這裡是鄴城的正南門——鳳陽門。");
此時控制台輸出的日誌信息如下圖所示:
由此可見,通過println列印的日誌內容是分行顯示的,而通過print列印的日誌都顯示在同一行。
既然調用System.out可以往控制台輸出日誌,那麼反過來,調用System.in也可以從控制台向程式輸入信息。只不過輸入文字的接收要分以下兩個步驟:
1、創建一個控制台的掃描器,隨時盯著控制台的輸入操作,掃描器的創建代碼如下所示:
Scanner scan = new Scanner(System.in); // 從控制台接收輸入文本
2、通過掃描器的nextLine方法獲得一行輸入文字,按下回車鍵表示該行文字輸入完畢。
下麵舉個從控制台獲取輸入信息的例子,曹操任命張遼鎮守合肥,而孫權親率大軍進攻合肥,張遼在逍遙津之戰中殺得東吳眾將丟盔棄甲。現在往控制台輸入向張遼挑戰的吳國將領姓名,看看都有誰前來應戰,完整的代碼示例如下:
package com.donghan.huainan.hefei; // 東漢帝國淮南郡合肥縣 import java.util.Scanner; public class Hefei { public static void main(String[] args) { System.out.print("這裡是張遼鎮守的合肥城,吳國誰來挑戰?"); Scanner scan = new Scanner(System.in); // 從控制台接收輸入文本 /* nextLine方法表示接收一行文字,以回車鍵結尾 */ System.out.println("吳國前來挑戰的將領是:"+scan.nextLine()); } }
接著通過右鍵菜單“Run As”→“Java Application”運行Hefei程式,併在控制台敲入“甘寧”,然後按下回車鍵。鍵盤輸入前後的控制台截圖如下所示,可見程式成功讀取到了控制台的輸入文字。
貿易官
帝國物產豐盈,各地都有聞名遐邇的土特產,比如曹操南征宛城張繡,結果反遭張繡暗算,致使大將典韋陣亡,這個宛城便是漢代最大的冶鐵中心。此外,蜀漢的成都平原盛產蜀錦,而東吳的景德鎮則盛產陶瓷。既然各地出產多種多樣,不妨互通有無,大家做個貿易,你賣你的,我賣我的,各取所需,皆大歡喜。這個進出口貿易,就由專門的貿易官來掌管。貿易官既負責出口商品,也負責進口商品。對於出口貿易來說,需要區分哪些地方是對外開放城市,又有哪些貨物是允許出口的普通商品。
對外開放在Java代碼中使用關鍵字public來表達,凡是被public首碼修飾了的城池,都是對外開放城市,凡是被public首碼修飾了的東西,都是允許出口的貨物。譬如下麵的代碼例子,指定了宛城是座對外開放城市,並且當地出產的鐵器也是可供出口的貨物。
package com.donghan.nanyang.wanxian; // 東漢帝國南陽郡宛縣 public class Wancheng { public static void getIron() { System.out.println("從宛城得到了一大批的鑄鐵兵器。"); } public static void main(String[] args) { System.out.println("歡迎來到大漢的冶鐵中心——宛城。"); } }
現在其它地方想要進口宛城的鐵器,就得通過貿易官開展進口貿易。貿易官首先通過關鍵字import說明將要從某地進口商品,就像如下代碼這般表示:
import com.donghan.nanyang.wanxian.Wancheng; // 準備從宛城進口商品
然後在具體運行的代碼段中添加來自Wancheng(宛城)的貿易進口代碼。再舉個例子,想當年關羽大舉北伐,消息傳到襄陽,曹軍主將曹仁趕忙從宛城進口了一批鐵質兵器,意圖加強軍備抵抗蜀軍。這樣的話,Xiangyang(襄陽)這個地方,需要聲明import(進口)來自Wancheng(宛城)的鐵器。於是完整的Xiangyang城代碼如下所示:
package com.donghan.nanjun.xiangyang; // 東漢帝國南郡襄陽縣 import com.donghan.nanyang.wanxian.Wancheng; // 準備從宛城進口商品 public class Xiangyang { public static void main(String[] args) { System.out.println("這裡是華夏第一城池——襄陽城。"); Wancheng.getIron(); // 開展從宛城進口鐵器的貿易 } }
最後仍舊通過右鍵菜單“Run As”→“Java Application”運行Xiangyang程式,程式運行結果如下圖所示。
可見Wancheng(宛城)的鐵器被進口到了Xiangyang(襄陽),用編程的專業術語來說,是Xiangyang這個類調用了Wancheng那個類的getIron方法。