Skip to content

Commit 7a9b4fc

Browse files
committed
Merge remote-tracking branch 'JustinSDK/master'
2 parents 5aff598 + e9e4f52 commit 7a9b4fc

File tree

13 files changed

+98
-98
lines changed

13 files changed

+98
-98
lines changed

README.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@ Java SE 6 技術手冊
33

44
為什麼選擇用 Markdown?只是單純把文件重新排版太無聊了,不如趁這個機會學些新東西,所以我就藉這個機會來學著用 Markdown,並看看它有什麼好處與壞處 ... 如果你需要 PDF 與 epub 格式,而又有點懶自己轉換,那麼可以考慮在 [Google Play](https://play.google.com/store/books/details?id=IYqPAgAAQBAJ)[Pubu](http://www.pubu.com.tw/ebook/Java-SE-6-%E6%8A%80%E8%A1%93%E6%89%8B%E5%86%8A-28587) 上向便當價致敬,如果你需要 mobi 格式,可以使用 [calibre](http://calibre-ebook.com/) 把 epub 轉為 mobi ... :)
55

6+
我在 GitBook 上用這本書前半本 [試排了一個版本](http://caterpillar.gitbooks.io/javase6tutorial/),如果你需要在 GitBook 上取得完整版本,請跟我聯絡!
67

7-
《Java SE 6 技術手冊》(以及它先前的版本)是以 [我的網站](http://openhome.cc) 中早期學習 Java 的筆記 [JavaGossip1](http://openhome.cc/Gossip/JavaGossip-V1/)[JavaGossip2](http://openhome.cc/Gossip/JavaGossip-V2/) 為基礎,記錄著我學習 Java 的一些心得。
8+
《Java SE 6 技術手冊》(以及它先前的版本)是以 [我的網站](https://openhome.cc) 中早期學習 Java 的筆記 [JavaGossip1](https://openhome.cc/Gossip/JavaGossip-V1/)[JavaGossip2](https://openhome.cc/Gossip/JavaGossip-V2/) 為基礎,記錄著我學習 Java 的一些心得。
89

910
在 JDK7 問世之後,由於累積不少 Java 教學經驗與想法,為了有一本可以符合我教學所需的教材,因而在為 JDK7 撰寫 Java 書籍時,並不是改版《Java SE 6 技術手冊》,而是重新撰寫了一本 [《Java SE 7 技術手冊》](http://books.gotop.com.tw/bookdetails.aspx?bn=ACL034000)
1011

@@ -15,12 +16,12 @@ Java SE 6 技術手冊
1516
每章的〈網路資源〉被我拿掉了,因為不少鏈結年代久遠已經失效,我懶得一個一個去檢查還有哪些鏈結活著 ... 附錄內容也因較舊而拿掉了,你可以分別參考以下資訊:
1617

1718
- [認識 Gradle](http://www.codedata.com.tw/java/understanding-gradle-1-ant/)
18-
- [JUnit](http://openhome.cc/Gossip/JUnit/)
19+
- [JUnit](https://openhome.cc/Gossip/JUnit/)
1920
- [MySQL 超新手入門](http://www.codedata.com.tw/database/mysql-tutorial-getting-started/)
2021

2122
原始碼範例都改為 UTF-8 編碼了,因此使用 `javac` 編譯時,記得加上 `-encoding UTF-8`
2223

23-
新的 Java 文件基於 JDK8 而撰寫,你可以在 [我的網站](http://openhome.cc) 上的 [Java Gossip](http://openhome.cc/Gossip/Java/) 進行閱讀。
24+
新的 Java 文件基於 JDK8 而撰寫,你可以在 [我的網站](https://openhome.cc) 上的 [Java Gossip](https://openhome.cc/Gossip/Java/) 進行閱讀。
2425

2526
----------
2627

docs/CH03.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1471,6 +1471,6 @@ continue 配合標籤,可以自由的跳至任何一層 for 迴圈,您可以
14711471

14721472
程式語言本質上就是語言,就像中文、英文一樣,要學習語言必先學習文法,這個章節所介紹的就是 Java 語言的基本文法(語法),接下來就是多使用這種語言以求熟悉這個語言,多找些題目來練習是必要的,在練習的同時培養使用 Java 語言的邏輯來思考問題,您可以在我的網站上找到一些常見的程式題目來作練習:
14731473

1474-
- http://openhome.cc/Gossip/AlgorithmGossip/
1474+
- https://openhome.cc/Gossip/AlgorithmGossip/
14751475

14761476
接下來我會介紹 Java SE 下提供的一些標準物件如何使用,在您正式瞭解 Java 的物件導向程式設計之前,您可以先將物件理解為一個現成的工具,Java SE 下提供了許多標準工具可以使用,熟悉這些工具的使用也是學習 Java 的必備功課。

docs/CH06.md

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -414,14 +414,14 @@ Java 在 J2SE 1.4 之後開始支援正則表示式,您可以在 API 文件的
414414
對於一些簡單的字元比對,例如 1 到 9、A-Z 等,您可以使用預先定義的符號來表示,表 6.4 列出幾個常用的字元比對符號。
415415

416416
#### **表 6.4 字元比對符號**
417-
| 方法 | 說明
418-
|:-- |:-
419-
| . | 符合任一字元
420-
| \d | 符合 0 到 9 任一個數字字元
421-
| \D | 符合 0-9 以外的字元
422-
| \s | 符合 '\t'、'\n'、'\x0B'、'\f'、'\r' 等空白字元
423-
| \w | 符合 a 到 z、A 到 Z、0 到 9 等字元,也就是數字或是字母都符合
424-
| \W | 符合 a 到 z、A 到 Z、0 到 9 等之外的字元,也就是除數字與字母外都符合
417+
| 方法 | 說明 |
418+
|:----- |:-- |
419+
| . | 符合任一字元 |
420+
| \d | 符合 0 到 9 任一個數字字元 |
421+
| \D | 符合 0-9 以外的字元 |
422+
| \s | 符合 '\t'、'\n'、'\x0B'、'\f'、'\r' 等空白字元 |
423+
| \w | 符合 a 到 z、A 到 Z、0 到 9 等字元,也就是數字或是字母都符合 |
424+
| \W | 符合 a 到 z、A 到 Z、0 到 9 等之外的字元,也就是除數字與字母外都符合 |
425425

426426
舉例來說,如果有一字串 "abcdebcadxbc",使用 ".bc" 來作比對的話,符合的子字串有 "abc"、"ebc"、"xbc" 三個;如果使用 "..cd",則符合的子字串只有 "abcd",範例 6.9證實這個說明。
427427

@@ -457,28 +457,28 @@ public class RegularExpressionDemo {
457457
您也可以使用「字元類」(Character class)來比較一組字元範圍,表 6.5 示範了幾個字元類的設定方式。
458458

459459
#### **表 6.5 字元類範例**
460-
| 範例 | 作用
461-
|:- |:-
462-
| [abc] | 符合 a、b 或 c
463-
| [^abc] | 符合「a 或 b 或 c」之外的字元
464-
| [a-zA-Z] | 符合 a 到 z 或者是 A 到 Z 的字元
465-
| [a-d[m-p]] | a 到 d 或者是m 到 p,也可以寫成 [a-dm-p]
466-
| [a-z&&[def]] | a 到 z 並且是 d 或 e 或 f,結果就是 d 或 e 或 f 可以符合
467-
| [a-z&&[^bc]] | a 到 z 並且不是 b 或 c
468-
| [a-z&&[^m-p]] | a 到 z 並且不是 m 到 p
460+
| 範例 | 作用 |
461+
|:--------------|:--|
462+
| [abc] | 符合 a、b 或 c |
463+
| [^abc] | 符合「a 或 b 或 c」之外的字元 |
464+
| [a-zA-Z] | 符合 a 到 z 或者是 A 到 Z 的字元 |
465+
| [a-d[m-p]] | a 到 d 或者是m 到 p,也可以寫成 [a-dm-p] |
466+
| [a-z&&[def]] | a 到 z 並且是 d 或 e 或 f,結果就是 d 或 e 或 f 可以符合 |
467+
| [a-z&&[^bc]] | a 到 z 並且不是 b 或 c |
468+
| [a-z&&[^m-p]] | a 到 z 並且不是 m 到 p |
469469

470470
指定一個字元之外,您也可以加上「貪婪量詞」(Greedy quantifiers)來指定字元可能出現的次數,表 6.6 示範了幾個例子。
471471

472472
#### **表 6.6 貪婪量詞範例**
473-
| 範例 | 作用
474-
|:- |:-
475-
| X? | X 可出現一次或完全沒有
476-
| X* | X 可出現零次或多次
477-
| X+ | X 可出現一次或多次
478-
| X{n} | X 可出現 n 次
479-
| X{n,} | X 可出現至少n次
480-
| X{n, m} | X 可出現至少 n 次,但不超過 m 次
481-
| X? | X 可出現一次或完全沒有
473+
| 範例 | 作用 |
474+
|:--------- |:-- |
475+
| X? | X 可出現一次或完全沒有 |
476+
| X* | X 可出現零次或多次 |
477+
| X+ | X 可出現一次或多次 |
478+
| X{n} | X 可出現 n 次 |
479+
| X{n,} | X 可出現至少n次 |
480+
| X{n, m} | X 可出現至少 n 次,但不超過 m 次 |
481+
| X? | X 可出現一次或完全沒有 |
482482

483483
另外還有 Reluctant quantifiers、Possessive quantifiers 等的指定,您可以自行參考 java.util.regex.Pattern 類別 API 文件中的說明。
484484

@@ -624,4 +624,4 @@ public class RegularExpressionDemo2 {
624624
- 瞭解使用 '==' 與 equals() 方法比較兩個字串時的不同點
625625
- 瞭解 '+' 使用於字串串接上的負擔
626626

627-
到目前為止,您僅止於使用物件的階段,接下來就要進入重頭戲了,從下一個章節開始,您將會逐步接觸 Java 中物件導向程式設計的領域,瞭解 Java 中的何種特性可以支援物件導向設計。
627+
到目前為止,您僅止於使用物件的階段,接下來就要進入重頭戲了,從下一個章節開始,您將會逐步接觸 Java 中物件導向程式設計的領域,瞭解 Java 中的何種特性可以支援物件導向設計。

docs/CH07.md

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ public class Account {
131131
<pre>Account account1 = new Account();
132132
Account account2 = new Account("123-4567", 100.0);</pre>
133133

134-
在上面的程式片段中宣告了 account1 與 account2 兩個 Account 型態的參考名稱,並讓它們分別參考至物件,account1 所參考的物件在建立時並不指定任何引數,所以根據之前對 Account 類別的定義,account1 所參考物件的 balance 將設定為 0.0,accountNumber 設定為 "empty";accont2 所參考的物件在新建時則給定兩個引數,所以 account2 所參考物件的 balance 設定為 100.0,而 accountNumber 設定為 "empty"。
134+
在上面的程式片段中宣告了 account1 與 account2 兩個 Account 型態的參考名稱,並讓它們分別參考至物件,account1 所參考的物件在建立時並不指定任何引數,所以根據之前對 Account 類別的定義,account1 所參考物件的 balance 將設定為 0.0,accountNumber 設定為 "empty";account2 所參考的物件在新建時則給定兩個引數,所以 account2 所參考物件的 balance 設定為 100.0,而 accountNumber 設定為 "123-4567"。
135135

136136
要透過公開成員來操作物件或取得物件資訊的話,可以在物件名稱後加上「.」運算子來進行,例如:
137137
<pre>account1.getBalance();
@@ -359,7 +359,7 @@ public class SafeArrayDemo {
359359

360360
### 7.1.5 關於 this
361361

362-
請您回顧一下範例 7.1,在範例的 Account 類別中定義有 accountNumber 與 balance 成員,當您使用 Account 類別新增兩個物件並使用 account1 與 account2 來參考時,account1 與 account2 所參考的物件會各自擁有自己的 accountNumber 與 balance 資料成員,然而方法成員在記憶體中會只有一份,當您使用 account1.getBalance() 與 account1.getBalance() 方法取回 balance 的值時,既然類別的方法成員只有一份,getBalance() 時如何知道它傳回的 balance 是 account1 所參考物件的 balance,還是 account2 所參考物件的 balance 呢?
362+
請您回顧一下範例 7.1,在範例的 Account 類別中定義有 accountNumber 與 balance 成員,當您使用 Account 類別新增兩個物件並使用 account1 與 account2 來參考時,account1 與 account2 所參考的物件會各自擁有自己的 accountNumber 與 balance 資料成員,然而方法成員在記憶體中會只有一份,當您使用 account1.getBalance() 與 account2.getBalance() 方法取回 balance 的值時,既然類別的方法成員只有一份,getBalance() 時如何知道它傳回的 balance 是 account1 所參考物件的 balance,還是 account2 所參考物件的 balance 呢?
363363

364364
![物件實例擁有自己的資料成員](../images/img07-04.png)
365365

@@ -716,7 +716,7 @@ public class UseRecursion {
716716

717717
> **良葛格的話匣子** 在我的網站上有很多題目可以作練習,也不乏有遞迴求解的例子:
718718
>
719-
> - http://openhome.cc/Gossip/AlgorithmGossip/
719+
> - https://openhome.cc/Gossip/AlgorithmGossip/
720720
721721
### 7.2.4 垃圾收集
722722

@@ -737,7 +737,10 @@ public class UseRecursion {
737737
圖 7.5 沒有被名稱參考到的物件資源將會被回收
738738

739739
範例7.13簡單的示範了finalize()方法的使用。
740+
740741
 範例7.13 GcTest.java
742+
743+
```java
741744
public class GcTest {
742745
private String name;
743746

@@ -750,7 +753,8 @@ public class GcTest {
750753
protected void finalize() {
751754
System.out.println(name + "被回收");
752755
}
753-
}.
756+
}
757+
```
754758

755759
使用範例 7.14來作個簡單的執行測試。
756760

@@ -780,12 +784,12 @@ public class UseGC {
780784
在程式中您故意加上無窮迴圈,以讓垃圾收集在程式結束前有機會執行,藉以瞭解垃圾收集確實會運作,程式執行結果如下所示:
781785

782786
請按Ctrl + C終止程式........
783-
bject1建立
784-
bject2建立
785-
bject3建立
786-
bject3被回收
787-
bject2被回收
788-
bject1被回收
787+
object1建立
788+
object2建立
789+
object3建立
790+
object3被回收
791+
object2被回收
792+
object1被回收
789793

790794
## 7.3 接下來的主題
791795

@@ -798,4 +802,4 @@ public class UseGC {
798802
- 瞭解靜態(static)成員的作用
799803
- 瞭解如何重載方法
800804

801-
在物件導向程式設計中,只是單純的封裝物件特性只能解決一部份的問題,有時候您必須提取出物件的共同抽象特性並加以定義,然後再「繼承」(Inherit)抽象的定義對個別的物件加以實作,有時您必須繼承某個類別並重新改寫類別中的某些定義,這在下一個章節中都會加以說明,並且您也將瞭解「抽象類別」(Abstract class)與「介面」(Interface)的不同。
805+
在物件導向程式設計中,只是單純的封裝物件特性只能解決一部份的問題,有時候您必須提取出物件的共同抽象特性並加以定義,然後再「繼承」(Inherit)抽象的定義對個別的物件加以實作,有時您必須繼承某個類別並重新改寫類別中的某些定義,這在下一個章節中都會加以說明,並且您也將瞭解「抽象類別」(Abstract class)與「介面」(Interface)的不同。

docs/CH08.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -836,7 +836,7 @@ public class GuessGameDemo {
836836
>
837837
> 我的網站上也整理有一些設計模式相關資料,並附有簡單的Java程式實例,您也可以一併參考:
838838
>
839-
> - http://openhome.cc/Gossip/DesignPattern/
839+
> - https://openhome.cc/Gossip/DesignPattern/
840840
841841
### 8.2.4 介面(Interface)
842842

docs/CH11.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,7 @@ public enum DetailAction3 implements IDescription {
358358

359359
> **良葛格的話匣子** 非公開的建構方法最常見的例子就是「Singleton 模式」的應用,當某個類別只能有一個實例時,可由類別維護唯一的實例,這時可以將建構方法設定為私用(private),取用此類別的開發人員就不能自行新增多個實例了,可以看看我網站上有關 Singleton模式的介紹:
360360
>
361-
> - http://openhome.cc/Gossip/DesignPattern/
361+
> - https://openhome.cc/Gossip/DesignPattern/
362362
363363
### 11.2.3 因值而異的類實作(Value-Specific Class Bodies)
364364

docs/CH12.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ public class GenericFoo3<T> {
220220

221221
您可以像下面的方式來使用範例 12.7 所定義的類別。
222222

223-
`String[] strs = {"caterpillar", "momor", "bush"};
223+
String[] strs = {"caterpillar", "momor", "bush"};
224224
GenericFoo3<String> foo = new GenericFoo3<String>();
225225
foo.setFooArray(strs);
226226
strs = foo.getFooArray();
@@ -324,7 +324,7 @@ HashMap 並沒有實作 List 介面,所以無法作為實例化型態持有者
324324
> **良葛格的話匣子** 實際上由於 List、Map、Set 與實作這些介面的相關類別,都已經用新的泛型功能重新改寫過了,實際撰寫時會更複雜一些,例如實際上您還可以再細部定義範例 12.9 的 ListGenericFoo:
325325
>
326326
> <pre>import java.util.List;
327-
> public class ListGenericFoo<T extends List<String>> {
327+
> public class ListGenericFoo&lt;T extends List&lt;String&gt;&gt; {
328328
> private T[] fooArray;
329329
> public void setFooArray(T[] fooArray) {
330330
> this.fooArray = fooArray;

docs/CH13.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ Iterable 介面要求實作它的類別傳回一個實作 java.util.Iterator 介
3333

3434
> **良葛格的話匣子** Iterator 是「Iterator 模式」的一個實例,有關 Iterator 模式,請參考我網站上的文件:
3535
>
36-
> - http://openhome.cc/Gossip/DesignPattern/
36+
> - https://openhome.cc/Gossip/DesignPattern/
3737
3838
Collection 介面繼承了 Iterator 介面,定義了加入元素、移除元素、元素長度等方法,
3939

@@ -690,7 +690,7 @@ public class HashMapDemo {
690690
可以使用 values() 方法返回一個實作 Collection 的物件,當中包括所有的「值」物件,如果您需要一次迭代 Map 中所有的物件,這會很有用,範例 13.17 是個簡單示範。
691691

692692
#### **範例 13.17 HashMapDemo2.java**
693-
`java
693+
```java
694694
package onlyfun.caterpillar;
695695

696696
import java.util.*;
@@ -761,9 +761,9 @@ public class LinkedHashMapDemo {
761761

762762
> **良葛格的話匣子** HashMap 是個被經常使用的物件,您可以參考下面幾個例子中有關 HashMap 的應用:
763763
>
764-
> - http://openhome.cc/Gossip/DesignPattern/CommandPattern.htm
765-
> - http://openhome.cc/Gossip/DesignPattern/ThreadPerMessage.htm
766-
> - http://openhome.cc/Gossip/JSPServlet/ControllerExample.htm
764+
> - https://openhome.cc/Gossip/DesignPattern/CommandPattern.htm
765+
> - https://openhome.cc/Gossip/DesignPattern/ThreadPerMessage.htm
766+
> - https://openhome.cc/Gossip/JSPServlet/ControllerExample.htm
767767
768768
### 13.2.2 TreeMap
769769

0 commit comments

Comments
 (0)