Skip to content

Commit 11098eb

Browse files
author
Justin Lin
committed
調整標題標註
1 parent 7dc8898 commit 11098eb

File tree

19 files changed

+73
-140
lines changed

19 files changed

+73
-140
lines changed

docs/CH03.md

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@
77

88
-----------
99

10-
3.1 第一個 Java 程式
11-
--------------------
10+
# 3.1 第一個 Java 程式
1211

1312
先來解釋一下第 2 章中您所完成的「第一個 Java 程式」,如果您學過 C 語言,對於 3.1.2「給 C 使用者的第一個 Java 程式」可能會覺得比較親切,因為介紹了類似 C 語言中 printf() 函式的功能,另外別忘了在寫程式時加入一些註解文字,這在閱讀程式碼的時候會很有幫助。
1413

@@ -189,8 +188,7 @@ public class ThirdJavaForC {
189188

190189
在'//'之後的內容被視為註解文字,編譯器不會去處理,所以執行時不會執行該行陳述,如果日後要重新恢復那些陳述句的功能,只要將註解符號消去就可以了。
191190

192-
3.2 在文字模式下與程式互動
193-
--------------------------
191+
# 3.2 在文字模式下與程式互動
194192

195193
從互動中學習,是我最喜愛的學習方式,我建議學習 Java 的第一步,要先能看到您的程式執行結果,要可以對程式輸入一些資料,作一些傻瓜式的互動。
196194

@@ -431,8 +429,7 @@ public class TigerNumberDemo {
431429

432430
> **良葛格的話匣子** 由於書的篇幅有限,我只在必要的時候列出一些常用的 API 文件表格說明,如果需要更多的說明,請直接查詢我所提供的文件索引,學會查詢線上文件也是學好 Java 的必備功夫喔!
433431
434-
3.3 資料、運算
435-
--------------
432+
# 3.3 資料、運算
436433

437434
電腦的原文是「Computer」,電腦的基本作用其實就是運算,要運算就要給它資料,要告訴電腦您給了它哪些資料?是整數還是小數?是文字還是字元?這就是程式語言術語中所謂的「指定變數與資料型態」!在給定了資料之後,接著您就可以叫電腦開始進行各種算術、邏輯、比較、遞增、遞減等等的運算。
438435

@@ -995,8 +992,7 @@ public class IncrementDecrement3 {
995992
> number = i++;
996993
> number = i--;
997994
998-
3.4 流程控制
999-
------------
995+
# 3.4 流程控制
1000996

1001997
現實生活中待解決的事千奇百怪,在電腦發明之後,想要使用電腦解決的需求也是各式各樣:「如果」發生了…,就要…;「對於」…,就一直執行…;「如果」…,就「中斷」…。為了告訴電腦在特定條件下該執行的動作,您要會使用各種條件式來定義程式執行的流程。
1002998

@@ -1068,12 +1064,13 @@ public class OddDecider3 {
10681064
if(條件式一) {
10691065
陳述句一;
10701066
// 其它陳述句
1071-
}
1072-
else if(條件式二)
1067+
}
1068+
else if(條件式二)
10731069
陳述句二;
10741070

10751071
基於這個方式,您可以如下設定多個條件,且易讀易懂:
1076-
if(條件式一)
1072+
1073+
if(條件式一)
10771074
陳述一;
10781075
else if(條件式二)
10791076
陳述句二;
@@ -1466,8 +1463,7 @@ public class ContinueTest {
14661463

14671464
continue 配合標籤,可以自由的跳至任何一層 for 迴圈,您可以試試 continue back1 與 continue back2 的不同,設定 back1 時,System.out.println("test"); 不會被執行。
14681465

1469-
3.5 接下來的主題
1470-
----------------
1466+
# 3.5 接下來的主題
14711467

14721468
每一個章節的內容由淺至深,初學者該掌握的深度要到哪呢?在這個章節中,對於初學者我建議至少掌握以下幾點內容:
14731469

docs/CH04.md

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@
77

88
----------
99

10-
4.1 關於物件
11-
------------
10+
# 4.1 關於物件
1211

1312
基本型態 long、int、double、float、boolean 等,在 J2SE 5.0 之前必須親自使用 Long、Integer、Double、Float、Boolean 等類別將之包裹為物件,如此才能將之當作物件來操作,即使 J2SE 5.0 開始支援了自動裝箱(autoboxing)、拆箱(unboxing),您仍然有必要瞭解如何親自包裹基本型態,這有助於您瞭解物件與基本型態的差別。
1413

@@ -158,8 +157,7 @@ public class WrapperDemo {
158157

159158
圖 4.1 Eclipse 上的物件方法提示
160159

161-
4.2 自動裝箱、拆箱
162-
------------------
160+
# 4.2 自動裝箱、拆箱
163161

164162
基本(Primitive)型態的自動裝箱(autoboxing)、拆箱(unboxing)是 J2SE 5.0 提供的新功能,雖然提供了您不用自行包裹基本型態的方便性,但提供方便的同時表示隱藏了細節,建議您在能夠區分基本型態與物件的差別時再來使用。
165163

@@ -312,8 +310,7 @@ public class AutoBoxDemo4 {
312310

313311
> **良葛格的話匣子** 基本上我是建議新手不要使用自動裝箱、拆箱的語法,在這邊說明這個功能是為了要完整性介紹 J2SE 5.0 的特性,新手入門的話,最好在對物件有較深入瞭解之後,再來使用這個功能。
314312
315-
4.3 接下來的主題
316-
----------------
313+
# 4.3 接下來的主題
317314

318315
每一個章節的內容由淺至深,初學者該掌握的深度要到哪呢?在這個章節中,對於初學者我建議至少掌握以下幾點內容:
319316

docs/CH05.md

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@
77

88
----------
99

10-
5.1 一維陣列、二維陣列
11-
--------------------
10+
# 5.1 一維陣列、二維陣列
1211

1312
不管在其它語言中是如何,陣列在 Java 中可得看作一個物件,它有一些值得探討的特性,這個小節會先介紹最常使用的一維陣列與二維陣列。
1413

@@ -285,8 +284,7 @@ public class TwoDimArray3 {
285284

286285
> **良葛格的話匣子** 在宣告二維陣列時,也可以使用 int arr[][] 這樣的宣告方式,這種宣告方式源於C/C++中對陣列宣告的語法,不過在 Java 中建議使用 int[][] arr 這樣的宣告方式,這也表示了 arr 是個 int[][] 型態的參考名稱;同樣的,您也可以使用 int arr[][][] 這樣的方式來宣告三維陣列,但鼓勵您使用 int[][][] arr 的宣告方式。
287286
288-
5.2 進階陣列觀念
289-
---------------
287+
# 5.2 進階陣列觀念
290288

291289
陣列本身若作為物件來操作的話,會有許多特性值得討論,這個小節中將討論一些 Java 中更進階的陣列觀念,並且我也將介紹 J2SE 5.0 中對 Arrays 類別所作的功能加強(JDK6 對於 Arrays 的加強,請查看第 21 章),以及如何使用 J2SE 5.0 新增的 foreach 語法來更簡便的循序存取陣列元素。
292290

@@ -655,8 +653,7 @@ J2SE 5.0 新增了 foreach 的語法,又稱加強的 for 迴圈(Enhanced for
655653

656654
當您搞不清楚物件之間的配置關係時,畫圖是很好的表示方式,在上圖中,我們可以看到有3個物件,而由於元素型態是 Integer,所以六個元素參考名稱預設都是參考至 null。
657655

658-
5.3 接下來的主題
659-
--------------
656+
# 5.3 接下來的主題
660657

661658
每一個章節的內容由淺至深,初學者該掌握的深度要到哪呢?在這個章節中,對於初學者我建議至少掌握以下幾點內容:
662659

docs/CH06.md

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@
77

88
---------
99

10-
6.1 認識字串
11-
-------------
10+
# 6.1 認識字串
1211

1312
字串的本質是字元(char)型態的陣列,在 Java 中則更將字串視為 String 類別的一個實例,也就是將其視為物件存在於程式之中,這讓字串處理在 Java 中變得簡單,這個小節就先從基本的字串特性開始認識。
1413

@@ -316,12 +315,11 @@ public class AppendStringTest {
316315

317316
StringBuilder 是 J2SE 5.0 才新增的類別,在 J2SE 5.0 之前的版本若有相同的需求,是使用 java.lang.StringBuffer,事實上,StringBuilder 被設計為與 StringBuffer 具有相同的操作介面,在單機非「多執行緒」(Multithread)的情況下使用 StringBuilder 會有較好的效率,因為 StringBuilder 沒有處理「同步」(Synchronized)問題;StringBuffer 則會處理同步問題,如果您的 StringBuilder 會在多執行緒下被操作,則要改用 StringBuffer,讓物件自行管理同步問題,關於多執行緒的觀念,會在第 15 章詳細說明。
318317

319-
6.2 字串進階運用
320-
---------------
318+
# 6.2 字串進階運用
321319

322320
在瞭解字串的基本特性之後,接下來看看如何操作字串,除了 String 類別上的幾個可用方法之外,您還可以使用一些輔助的類別,像是「正則表示式」(Regular expression)於字串比對上的應用。
323321

324-
6.2.1 命令列引數
322+
## 6.2.1 命令列引數
325323

326324
在文字模式下執行程式時,通常您可以連帶指定一些引數給程式,例如 javac 本身就附帶了一堆引數可以使用,直接鍵入javac就可以顯示每個引數所代表的意義。
327325

@@ -617,8 +615,7 @@ public class RegularExpressionDemo2 {
617615

618616
> **良葛格的話匣子** 在這邊想再嘮叨一下,在書中我有介紹的類別上之方法操作,都只是 API 中一小部份而已,目的只是讓您瞭解有這個功能的存在,並以實際的範例體會其功能,真正要瞭解每個方法的操作,「請多參考線上 API 文件」,我不想列出一長串的表格來說明每個方法,這只會讓篇幅增加,也只會模糊了您學習的焦點,而且請記得,學會查詢 API 文件,絕對是學好 Java 的必備功夫。
619617
620-
6.3 接下來的主題
621-
---------------
618+
# 6.3 接下來的主題
622619

623620
每一個章節的內容由淺至深,初學者該掌握的深度要到哪呢?在這個章節中,對於初學者我建議至少掌握以下幾點內容:
624621

docs/CH07.md

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@
77

88
----------
99

10-
7.1 定義類別(Class)
11-
---------------------
10+
# 7.1 定義類別(Class)
1211

1312
以物件導向的思維來思考一個問題的解答時,會將與問題相關的種種元素視作一個個的物件,問題的發生是由物件的交互所產生,而問題的解答也由某些物件彼此合作來完成。所以如何描述問題中的各種元素?如何將這些元素定義為物件?也就是如何封裝物件資訊就是物件導向設計的第一步。您要瞭解如何使用「類別」(Class)定義物件,類別是建構物件時所依賴的規格書。
1413

@@ -505,8 +504,7 @@ public class StaticBlockDemo {
505504

506505
類別被載入
507506

508-
7.2 關於方法
509-
------------
507+
# 7.2 關於方法
510508

511509
在對定義類別有了瞭解之後,接下來再深入討論類別中的方法成員,在 Java 中,您可以「重載」(Overload)同名方法,而在 J2SE 5.0 之後,您還可以提供方法不定長度引數(Variable-length Argument),當然,最基本的您要知道遞迴(Recursive)方法的使用,最後還要討論一下 finalize() 方法,並從中瞭解一些 Java「垃圾收集」(Garbage collection)的機制。
512510

@@ -790,8 +788,7 @@ public class UseGC {
790788
bject2被回收
791789
bject1被回收
792790

793-
7.3 接下來的主題
794-
----------------
791+
# 7.3 接下來的主題
795792

796793
每一個章節的內容由淺至深,初學者該掌握的深度要到哪呢?在這個章節中,對於初學者我建議至少掌握以下幾點內容:
797794

docs/CH08.md

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@
77

88
------------------
99

10-
8.1 繼承
11-
--------
10+
# 8.1 繼承
1211

1312
您可以基於某個父類別對物件的定義加以擴充,而制訂出一個新的子類別定義,子類別可以繼承父類別原來的某些定義,並也可能增加原來的父類別所沒有的定義,或者是重新定義父類別中的某些特性,事實上,在您開始學會使用 "class" 關鍵字定義類別的同時,您也已經使用了繼承的功能,因為在 Java 中,所有的類別都直接或間接的繼承了 java.lang.Object 類別。
1413

@@ -592,8 +591,7 @@ public class CloneDemo {
592591
// ....
593592
}
594593

595-
8.2 多型(Polymorphism)
596-
------------------------
594+
# 8.2 多型(Polymorphism)
597595

598596
多型操作指的是使用同一個操作介面,以操作不同的物件實例,多型操作在物件導向上是為了降低對操作介面的依賴程度,進而增加程式架構的彈性與可維護性。多型操作是物件導向上一個重要的特性,這個小節會介紹多型的觀念,以及「抽象類別」(Abstract)與「介面」(Interface)應用的幾個實例。
599597

@@ -964,8 +962,7 @@ public class RequestDemo {
964962
965963
> 在設計上鼓勵依賴關係儘量發生在介面上,雖然抽象類別也可以達到多型操作的目的,但依賴於抽象類別,表示您也依賴於某個類型(類別),而依賴於介面則不管物件實際上是哪個類型(類別)的實例,只要知道物件實作了哪個介面就可以了,比抽象類別的依賴多了一些彈性。
966964
967-
8.3 接下來的主題
968-
----------------
965+
# 8.3 接下來的主題-
969966

970967
每一個章節的內容由淺至深,初學者該掌握的深度要到哪呢?在這個章節中,對於初學者我建議至少掌握以下幾點內容:
971968

docs/CH09.md

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@
77

88
--------------
99

10-
9.1 內部類別
11-
-------------
10+
# 9.1 內部類別
1211

1312
在類別中您還可以再定義類別,稱之為「內部類別」(Inner class)或「巢狀類別」(Nested class)。非靜態的內部類別可以分為三種:「成員內部類別」(Member inner class)、「區域內部類別」(Local inner class)與「匿名內部類別」(Anonymous inner class)。內部類別的主要目的,都是對外部隱藏類別的存在性。
1413

@@ -176,8 +175,7 @@ public class AnonymousClassDemo {
176175

177176
在檔案管理方面,內部匿名類別在編譯完成之後會產生「外部類別名稱\$編號.class」,編號為 1、2、3...n,每個編號 n 的檔案對應於第 n 個匿名類別,所以範例 9.3編 譯完成後,會產生 AnonymousClassDemo.class與AnonymousClassDemo$1.class 兩個檔案。
178177

179-
9.2 package 與 import
180-
---------------------
178+
# 9.2 package 與 import
181179

182180
隨著程式架構越來越大,類別個數越來越多,您會發現管理程式中維護類別名稱也會是一件麻煩的事,尤其是一些同名問題的發生,例如在程式中,您也許會定義一個 Point 類別,但另一個與您合作開發程式的開發人員並不曉得已經有這個類別名稱的存在,他可能也定義了一個 Point 類別,於是編譯過後他的 Point 類別檔案會覆蓋您的 Point 類別檔案,問題就這麼發生了。
183181

@@ -547,8 +545,7 @@ public class ImportStaticDemo {
547545
^
548546
1 error
549547

550-
9.3 接下來的主題
551-
----------------
548+
# 9.3 接下來的主題
552549

553550
每一個章節的內容由淺至深,初學者該掌握的深度要到哪呢?在這個章節中,對於初學者我建議至少掌握以下幾點內容:
554551

docs/CH10.md

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@
77

88
--------
99

10-
10.1 例外處理入門
11-
-----------------
10+
# 10.1 例外處理入門
1211

1312
回憶一下 6.2.1 中介紹過的「命令列引數」(Command line argument),在還沒有學會使用Java的例外處理之前,為了確定使用者是否有提供引數,您可能要先檢查引數的陣列長度是否為 0,以免程式存取超過陣列長度而發生錯誤:
1413

@@ -79,8 +78,7 @@ public class CheckArgsDemo {
7978
System.out.println(args[i]);
8079
}
8180

82-
10.2 受檢例外(Checked Exception)、執行時期例外(Runtime Exception)
83-
----------------------------------------------------------------------
81+
# 10.2 受檢例外(Checked Exception)、執行時期例外(Runtime Exception)
8482

8583
在某些情況下例外的發生是可預期的,例如使用輸入輸出功能時,可能會由於硬體環境問題,而使得程式無法正常從硬體取得輸入或進行輸出,這種錯誤是可預期發生的,像這類的例外稱之為「受檢例外」(Checked Exception),對於受檢例外編譯器會要求您進行例外處理,例如在使用 java.io.BufferedReader 的 readLine() 方法取得使用者輸入時,編譯器會要求您於程式碼中明確告知如何處理 java.io.IOException,範例 10.2 是個簡單的示範。
8684

@@ -117,8 +115,7 @@ IOException 是受檢例外,是可預期會發生的例外,編譯器要求
117115

118116
如果 try...catch 後設定有 "finally" 區塊,則無論例外是否有發生,都一定會執行 "finally" 區塊。
119117

120-
10.3 throw、throws
121-
-------------------
118+
# 10.3 throw、throws
122119

123120
當程式發生錯誤而無法處理的時候,會丟出對應的例外物件,除此之外,在某些時刻,您可能會想要自行丟出例外,例如在捕捉例外並處理結束後,再將例外丟出,讓下一層例外處理區塊來捕捉;另一個狀況是重新包裝例外,將捕捉到的例外以您自己定義的例外物件加以包裝丟出。若想要自行丟出例外,您可以使用 "throw" 關鍵字,並生成指定的例外物件,例如:
124121

@@ -257,8 +254,7 @@ public class ThrowsDemo {
257254

258255
> **良葛格的話匣子** 您也可以在定義介面(interface)時於方法上聲明"throws"某些類型的例外,然而要小心使用,因為若您在這些方法中發生了某些不是方法聲明的例外,您就無法將之"throw",只能自行撰寫一些try..catch來暗自處理掉,或者是重新包裝例外為"throws"上所聲明的例外,或者是將該例外包裝為RuntimeException然後再丟出。
259256
260-
10.4 例外的繼承架構
261-
-------------------
257+
# 10.4 例外的繼承架構
262258

263259
Java 所處理的例外主要可分為兩大類:一種是嚴重的錯誤,例如硬體錯誤或記憶體不足等問題,與此相關的類別是位於 java.lang 下的 Error 類別及其子類別,對於這類的錯誤通常程式是無力自行回復;另一種是非嚴重的錯誤,代表可以處理的狀況,例如使用者輸入了不合格式的資料,這種錯誤程式有機會回復至正常運作狀況,與這類錯誤相關的類別是位於 java.lang 下的 Exception 類別及其子類別。
264260

@@ -365,8 +361,7 @@ public class ExceptionDemo2 {
365361
- throws 父類別方法中未定義的其它例外
366362
- throws 被重新定義的方法上之例外之父類別
367363

368-
10.5 斷言(Assertion)
369-
---------------------
364+
# 10.5 斷言(Assertion)
370365

371366
例外是程式中非預期的錯誤,例外處理是在這些錯誤發生時所採取的措施。
372367
有些時候,您預期程式中應該會處於何種狀態,例如某些情況下某個值必然是多少,這稱之為一種斷言。斷言有兩種結果:成立或不成立。當預期結果與實際執行相同時,斷言成立,否則斷言不成立。
@@ -421,8 +416,7 @@ public class AssertionDemo {
421416

422417
簡單的說,斷言是判定程式中的某個執行點必然是某個狀態,所以它不能當作像 if 之類的判斷式來使用,Assertion 不應被當做程式執行流程的一部份。
423418

424-
10.6 接下來的主題
425-
-----------------
419+
# 10.6 接下來的主題
426420

427421
每一個章節的內容由淺至深,初學者該掌握的深度要到哪呢?在這個章節中,對於初學者我建議至少掌握以下幾點內容:
428422

0 commit comments

Comments
 (0)