《Java從入門到失業》第四章:類和物件(4.2):String類
4.2String類
這一節,我們學習第一個類:String類。String翻譯成漢語就是“字串”,是字元的序列。我們知道,在Java中,預設採用Unicode字符集,因此字串就是Unicode字元的序列。例如字串“Java大失叔”,就是由7個Unicode字元‘J’、‘a’、‘v’、‘a’、‘大’、‘失’、‘叔’組成。在JDK中,把字串抽象成一個類String提供給我們使用。String類在java.lang包中。
4.2.1構造String物件
上面我們說了,想看電視得先買一臺電視,電視在出廠的時候廠家會初始化它的狀態。想使用String類,得先得到一個String的物件,然後指定屬性的初始狀態,然後才能使用它。得到物件的過程,叫做構造物件。在Java中,我們用構造器(constructor)來構造例項,構造器其實是一種特殊的方法,用來構造並初始化物件。我們採用在構造器前面加上new關鍵字來實現,例如:
new 構造器();
我們檢視String類的API文件(怎麼查這裡不再贅述),構造方法截圖如下:
發現String類的構造方法有幾個特點:
- 足足有15個構造方法
- 有的方法上標有Deprecated,這個標籤的含義是不推薦使用,將來在新版本中可能會移除
- 構造方法的名字和類名相同
構造方法的名字和類名相同,這是Java構造器的特點,也是規定。我們挑選其中一個構造方法:String(char[] value)
我們看到,這其實就是用一個char陣列來構造一個字串,那麼首先我們得有一個char陣列才行,例如我們想要得到一個字串“Java大失叔,你真棒”。那麼程式碼如下:
char[] a = { 'J', 'a', 'v', 'a', '大', '失', '叔', ',', '你', '真', '棒' }; String s = new String(a); System.out.println(s);// 結果輸出:Java大失叔,你真棒
事實上,由於String太常用了,Java給我們提供了更加簡便的構造方法,直接用雙引號將一段字元序列包起來,就得到了一個String的例項:
String s = "Java大失叔,你真棒";
OK,我們得到了一個String物件了,下面我們來使用這個物件。我們可以看到,API中有幾十個方法,我們挑選一些常用的演示一下。
4.2.2程式碼點和程式碼單元
首先,我們回憶一下關於char和Unicode的知識。Unicode定義了U+0000到U+10FFFF一共1114112個碼位(code point),英文直譯為程式碼點。一個程式碼點表示一個字元。char是用來存放UTF-16編碼中的一個程式碼單元(code unit),即2個位元組。平面0的程式碼點用一個程式碼單元即一個char就可以表示,其餘的程式碼點需要用2個程式碼單元即2個char才能表示。
我們知道Stirng是Unicode字元的序列,但是底層的實現實際上是用char構成的。String類提供了一些關於程式碼點和程式碼單元相關的方法,請看下面摘抄的幾個方法:
修飾和型別 |
方法 |
描述 |
int |
length() |
返回字串的長度 |
int |
codePointCount(int beginIndex, int endIndex) |
返回beginIndex和endIndex-1之間的程式碼點的數量。 |
char |
charAt(int index) |
返回index索引處的char |
int |
codePointAt(int index) |
返回index索引處的程式碼點 |
我們想獲得字元的數量(即程式碼點的數量),需要用codePointCount方法,而length方法返回的是char的數量(即程式碼單元的數量)。呼叫物件的方法很簡單,用如下形式:
物件.方法();
程式碼示例如下:
String s = "大失叔喜歡打麻將