與Java運行環境交互
Sun為Java提供了豐富的基礎類庫,Java SE提供了三千多個基礎類(包括第7章介紹的集合框架),通過這些基礎類庫可以提高開發效率,降低開發難度。對于合格的Java程序員而言,至少要熟悉Java SE中70%以上的類(當然,筆者并不是讓讀者去背誦Java API文檔),但在反復查閱API文檔的過程中,大腦會自動記住大部分類的功能、方法,因此程序員一定要多練,多敲代碼。
Java提供了String、StringBuffer和StringBuilder來處理字符串,它們之間存在少許差別,本章會詳細介紹它們之間的差別,以及如何選擇合適的字符串類。Java還提供了Date和Calendar來處理日期、時間,其中Date是一個已經過時的API,通常推薦使用Calendar來處理日期、時間。
正則表達式是一個強大的文本處理工具,通過正則表達式可以對文本內容查找、替換、分割等操作。從JDK1.4以后,Java也增加了對正則表達式的支持,包括新增的Pattern和Matcher兩個類,并改寫了String類,讓String類增加了正則表達式支持,增加了正則表達式功能后的String類更加強大。
Java還提供了非常簡單的國際化支持,Java使用Locale對象封裝一個國家、語言環境,再使用ResourceBundle根據Locale加載語言資源包,當ResourceBundle加載了指定Locale對應的語言資源文件后,ResourceBundle對象就可調用getString方法來取出指定key所對應的消息字符串。
與用戶互動
如果一個程序總是按既定的流程運行,無須處理用戶動作,這個程序總是比較簡單的。實際上,絕大部分程序都需要處理用戶動作,包括接受用戶的鍵盤輸入、鼠標動作等。因為現在還未涉及圖形用戶接口(GUI)編程,故本節主要介紹程序如何獲得用戶的鍵盤輸入。
運行Java程序的參數
回憶Java程序的入口:main方法的方法簽名:
//Java程序入口:main方法
public static void main(String[] args){….}
現在可以詳細講解main方法為什么采用這個方法簽名:
1、public修飾符:Java類由JVM調用,為了讓JVM可以自由調用這個main方法,所以使用public修飾符把這個方法暴露出來。
2、static修飾符:JVM調用這個主方法時,不可能先創建該主類的對象,然后通過對象來調用該主方法。JVM直接通過主類來調用主方法,因此使用static修飾該主方法。
3、void返回值:因為主方法被JVM調用,該方法的返回值將返回給 JVM,這沒有任何意義,因此main方法沒有返回值。
上面方法中還包括一個字符串數組形參,根據前面介紹方法調用的規則:誰調用方法,誰負責為形參賦值。也就是說,main方法由JVM調用,即args形參應該由JVM負責賦值。但JVM怎么知道如何為args數組賦值呢?我們先看下面程序:
程序清單:codes/09/9- 1/TestArgs.java
public class TestArgs
{
public static void main(String[] args)
{
//輸出args數組的長度
System.out.println(args.length);
//遍歷args數組的每個元素
for(String arg:args)
{
System.out.pringln(arg);
}}}
上面程序幾乎是最簡單的“HelloWorld”程序,只是這個程序增加了輸出args數組的長度,遍歷args數組元素的代碼。使用java TestArgs命令運行上面程序,看到程序僅僅輸出一個0,這表明args數組是一個長度為0的空數組—這是合理的:因為計算機是沒有思考能力的,它只能忠實地執行用戶交給它的任務,既然我們沒有給args數組設定參數值,那么JVM就不知道args數組的元素,所以JVM以將args數組設置成一個長度為。的數組。
改為如下命令來運行上面程序:
java TestArgs Java Spring
看到如圖9.1所示的運行結果:
圖9.1為main方法的形參數組賦值
從圖9.1中可以看出,如果運行Java程序時在類名后緊跟一個或多個字符串(多個字符串之間以空格隔開),JVM就會把這些字符串依次賦給args數組元素。運行Java程序時的參數與args數組之間的對應關系如圖9.2所示:
圖9.2運行Java程序時參數和args數組的關系
如果某參數本身包含了空格,則應該將該參數用雙引號(“)括起來,否則JVM會把這個空格當成參數分隔符,而不是當成參數本身。例如采用如下命令來運行上面程序:
java TestArgs “Java Spring”
運行上面命令,看到args數組的長度是1,只有一個數組元素,其值是Java Spring。
摘自《瘋狂java講義》