File tree Expand file tree Collapse file tree 12 files changed +74
-64
lines changed Expand file tree Collapse file tree 12 files changed +74
-64
lines changed Original file line number Diff line number Diff line change @@ -310,7 +310,7 @@ public class AppendStringTest {
310
310
for(int i = 0; i < 10000; i++)
311
311
builder.append(i);
312
312
313
- 使用 StringBuilder 最後若要輸出字串結果,可以呼叫其 toString() 方法,您可以使用 length() 方法得知目前物件中的字元長度,而 capacity() 可傳回該物件目前可容納的字元容量,另外 StringBuilder 還有像是 insert() 方法可以將字元插入指定的位置,如果該位置以後有字元,則將所有的字元往後移;deleteChar() 方法可以刪除指定位置的字元,而 reserve () 方法可以反轉字串,詳細的使用可以查詢看看 java.lang.StringBuilder 的 API 文件說明。
313
+ 使用 StringBuilder 最後若要輸出字串結果,可以呼叫其 toString() 方法,您可以使用 length() 方法得知目前物件中的字元長度,而 capacity() 可傳回該物件目前可容納的字元容量,另外 StringBuilder 還有像是 insert() 方法可以將字元插入指定的位置,如果該位置以後有字元,則將所有的字元往後移;deleteChar() 方法可以刪除指定位置的字元,而 reverse () 方法可以反轉字串,詳細的使用可以查詢看看 java.lang.StringBuilder 的 API 文件說明。
314
314
315
315
StringBuilder 是 J2SE 5.0 才新增的類別,在 J2SE 5.0 之前的版本若有相同的需求,是使用 java.lang.StringBuffer,事實上,StringBuilder 被設計為與 StringBuffer 具有相同的操作介面,在單機非「多執行緒」(Multithread)的情況下使用 StringBuilder 會有較好的效率,因為 StringBuilder 沒有處理「同步」(Synchronized)問題;StringBuffer 則會處理同步問題,如果您的 StringBuilder 會在多執行緒下被操作,則要改用 StringBuffer,讓物件自行管理同步問題,關於多執行緒的觀念,會在第 15 章詳細說明。
316
316
Original file line number Diff line number Diff line change @@ -388,7 +388,7 @@ public class SafeArrayDemo {
388
388
389
389
public Account(String number, double money) {
390
390
accountNumber = number; // 實際等於this.accountNumber = number;
391
- this. balance = money; // 實際等於this.balance = money;
391
+ balance = money; // 實際等於this.balance = money;
392
392
}
393
393
394
394
this 除了用來參考至呼叫方法的實際物件之外,還有一種可以帶引數的用法,主要是用於呼叫建構方法,而避免直接以建構方法的名稱來呼叫,例如在下面的程式片段中,當使用無參數的建構方法 Ball() 時,它會呼叫有參數的建構方法:
Original file line number Diff line number Diff line change @@ -643,7 +643,7 @@ public class CloneDemo {
643
643
644
644
public class ConcreteCircle {
645
645
private double radius;
646
- public void setRedius(int radius) { this.radius = radius; }
646
+ public void setRadius(double radius) { this.radius = radius; }
647
647
public double getRadius() { return radius; }
648
648
public void render() {
649
649
System.out.printf("畫一個半徑 %f 的實心圓\n", getRadius());
@@ -652,7 +652,7 @@ public class CloneDemo {
652
652
653
653
public class HollowCircle {
654
654
private double radius;
655
- public void setRedius(int radius) { this.radius = radius; }
655
+ public void setRadius(double radius) { this.radius = radius; }
656
656
public double getRadius() { return radius; }
657
657
public void render() {
658
658
System.out.printf("畫一個半徑 %f 的空心圓\n", getRadius());
@@ -666,7 +666,7 @@ public class CloneDemo {
666
666
public abstract class AbstractCircle {
667
667
protected double radius;
668
668
669
- public void setRedius ( int radius ) { this . radius = radius; }
669
+ public void setRadius ( double radius ) { this . radius = radius; }
670
670
public double getRadius () { return radius; }
671
671
672
672
public abstract void render ();
Original file line number Diff line number Diff line change @@ -273,7 +273,7 @@ Error 類別與 Exception 類別都繼承自 Throwable 類別,Throwable 類別
273
273
274
274
除了使用這些方法之外,您也可以簡單的利用例外物件 toString() 方法取得例外的簡單訊息描述。
275
275
276
- 您所接觸的例外通常都是衍生自 Exception 類別,其中是有些 「受檢例外」(Checked exception),例如 ClassNotFoundException(嘗試載入類別時失敗所引發,例如類別檔案不存在)、InterruptedException(執行緒非執行中而嘗試中斷所引發的例外)等,而有些是「執行時期例外」(Runtime exception),也稱「非受檢例外」(Unckecked exception),例如 ArithmeticException、ArrayIndexOutOfBoundsException 等。以下列出一些重要的例外繼承架構:
276
+ 您所接觸的例外通常都是衍生自 Exception 類別,其中有些是 「受檢例外」(Checked exception),例如 ClassNotFoundException(嘗試載入類別時失敗所引發,例如類別檔案不存在)、InterruptedException(執行緒非執行中而嘗試中斷所引發的例外)等,而有些是「執行時期例外」(Runtime exception),也稱「非受檢例外」(Unchecked exception),例如 ArithmeticException、ArrayIndexOutOfBoundsException 等。以下列出一些重要的例外繼承架構:
277
277
278
278
Throwable
279
279
Error(嚴重的系統錯誤)
Original file line number Diff line number Diff line change @@ -198,8 +198,8 @@ public class GenericFoo2<T1, T2> {
198
198
199
199
您可以如下使用 GenericFoo2 類別,分別以 Integer 與 Boolean 設定 T1 與 T2 的真正型態:
200
200
201
- GenericFoo <Integer, Boolean> foo =
202
- new GenericFoo <Integer, Boolean>();
201
+ GenericFoo2 <Integer, Boolean> foo =
202
+ new GenericFoo2 <Integer, Boolean>();
203
203
204
204
泛型可以用於宣告陣列型態,範例 12.7 是個簡單示範。
205
205
Original file line number Diff line number Diff line change @@ -297,7 +297,7 @@ public class StreamDemo {
297
297
298
298
### 14.2.2 FileInputStream、FileOutputStream
299
299
300
- java.io.FileInputStream 是 InputStream 的子類,由開頭 File 名稱上就可以知道,FileInputStream 與從指定的檔案中讀取資料至目的地有關,而 java.io.FileOutputStream 是 OutputStream 的子類,顧名思義,FileOnputStream 主要與從來源地寫入資料至指定的檔案中有關。
300
+ java.io.FileInputStream 是 InputStream 的子類,由開頭 File 名稱上就可以知道,FileInputStream 與從指定的檔案中讀取資料至目的地有關,而 java.io.FileOutputStream 是 OutputStream 的子類,顧名思義,FileOutputStream 主要與從來源地寫入資料至指定的檔案中有關。
301
301
302
302
當您建立一個 FileInputStream 或 FileOutputStream 的實例時,必須指定檔案位置及檔案名稱,實例被建立時檔案的串流就會開啟,而不使用串流時,您必須關閉檔案串流,以釋放與串流相依的系統資源,完成檔案讀寫的動作。
303
303
@@ -751,7 +751,7 @@ public class ObjectStreamDemo {
751
751
momor 103
752
752
becky 104
753
753
754
- 注意在試圖將物件附加至一個先前已寫入物件的檔案時,由於 ObjectOutputStream 在寫入資料時,還會加上一個特別的串流頭(Stream header),而讀取檔案時會檢查這個串流頭,如果一個檔案中被多次附加物件,那麼該檔案中會有多個串流頭,如此讀取檢查時就會發現不一致,這會丟出 java.io.StreamCorrupedException ,為了解決這個問題,您可以重新定義 ObjectOutputStream 的 writeStreamHeader() 方法,如果是以附加的方式來寫入物件,就不寫入串流頭:
754
+ 注意在試圖將物件附加至一個先前已寫入物件的檔案時,由於 ObjectOutputStream 在寫入資料時,還會加上一個特別的串流頭(Stream header),而讀取檔案時會檢查這個串流頭,如果一個檔案中被多次附加物件,那麼該檔案中會有多個串流頭,如此讀取檢查時就會發現不一致,這會丟出 java.io.StreamCorruptedException ,為了解決這個問題,您可以重新定義 ObjectOutputStream 的 writeStreamHeader() 方法,如果是以附加的方式來寫入物件,就不寫入串流頭:
755
755
756
756
ObjectOutputStream objOutputStream =
757
757
new ObjectOutputStream(
@@ -973,7 +973,7 @@ public class PrintStreamDemo {
973
973
974
974
### 14.2.8 ByteArrayInputStream、ByteArrayOutputStream
975
975
976
- 串流的來源或目的地不一定是檔案,也可以是記憶體中的一個空間,例如一個位元陣列,java.io.ByteArrayInputStream、java.io.ByteArray OutputStream 即是將位元陣列當作串流輸入來源、輸出目的地的類別。
976
+ 串流的來源或目的地不一定是檔案,也可以是記憶體中的一個空間,例如一個位元陣列,java.io.ByteArrayInputStream、java.io.ByteArrayOutputStream 即是將位元陣列當作串流輸入來源、輸出目的地的類別。
977
977
978
978
ByteArrayInputStream 可以將一個陣列當作串流輸入的來源,而 ByteArrayOutputStream 則可以將一個位元陣列當作串流輸出的目的地,在這邊舉一個簡單的檔案位元編輯程式作為例子,您可以開啟一個簡單的文字檔案,當中有簡單的 ABCDEFG 等字元,在讀取檔案之後,您可以直接以程式來指定檔案中位元的位置來修改所指定的字元,作法是將檔案讀入陣列中,指定陣列索引修改元素,然後重新將陣列存回檔案,範例 14.14 是實作的程式內容。
979
979
Original file line number Diff line number Diff line change @@ -52,7 +52,7 @@ public class ClassDemo {
52
52
53
53
Class stringClass = String.class;
54
54
55
- Java 在真正需要類別時才會載入類別,所謂「真正需要」通常指的是要使用指定的類別生成物件時(或是使用者指定要載入類別時,例如使用 Class.forName() 載入類別,或是使用 ClassLoader 的 loadClass() 載入類別,稍後都會說明)。使用類別名稱來宣告參考名稱並不會導致類別的載入,可以設計一個測試類別的印證這個說法 。
55
+ Java 在真正需要類別時才會載入類別,所謂「真正需要」通常指的是要使用指定的類別生成物件時(或是使用者指定要載入類別時,例如使用 Class.forName() 載入類別,或是使用 ClassLoader 的 loadClass() 載入類別,稍後都會說明)。使用類別名稱來宣告參考名稱並不會導致類別的載入,可以設計一個測試類別印證這個說法 。
56
56
57
57
#### ** 範例 16.2 TestClass.java**
58
58
``` java
@@ -475,7 +475,7 @@ onlyfun.caterpillar.SomeClass 是個自訂類別,您在目前的工作目錄
475
475
476
476
由於 SomeClass 這次可以在 Bootstrap Loader 的設定路徑下找到,所以會由 Bootstrap Loader 來載入 SomeClass 類別,Bootstrap Loader 通常由 C 撰寫而成,在 Java 中沒有一個實際的類別來表示,所以顯示為 null,因為表示為 null,所以再 由 null 上嘗試呼叫 getParent() 方法就會丟出 NullPointerException 例外。
477
477
478
- 取得 ClassLoader 的實例之後,您可以使用它的 loadClass() 方法來載入類別,使用 loadClass() 方法載入別時 ,不會執行靜態區塊,靜態區塊的執行會等到真正使用類別來建立實例時,例如您可以改寫範例 16.7 為範例 16.12。
478
+ 取得 ClassLoader 的實例之後,您可以使用它的 loadClass() 方法來載入類別,使用 loadClass() 方法載入類別時 ,不會執行靜態區塊,靜態區塊的執行會等到真正使用類別來建立實例時,例如您可以改寫範例 16.7 為範例 16.12。
479
479
480
480
#### ** 範例 16.12 ForNameDemoV3.java**
481
481
``` java
Original file line number Diff line number Diff line change @@ -407,7 +407,7 @@ Annotation 標示於方法上的話,就要取得方法的 Method 代表實例
407
407
TYPE, // 適用 class, interface, enum
408
408
FIELD, // 適用 field
409
409
METHOD, // 適用 method
410
- PARAMETER, // 適用 method 上之 parametar
410
+ PARAMETER, // 適用 method 上之 parameter
411
411
CONSTRUCTOR, // 適用 constructor
412
412
LOCAL_VARIABLE, // 適用區域變數
413
413
ANNOTATION_TYPE, // 適用 annotation 型態
Original file line number Diff line number Diff line change @@ -825,7 +825,7 @@ public class MessageFormatDemo {
825
825
826
826
### 18.3.3 國際化訊息
827
827
828
- 國際化的英文是 Internationalization,因為單字中總共有18個字母而首尾字元分別為 'I' 與 'N',所以簡稱 I18N,國際化的目的是讓應用程式可以依地區不同而顯示不同的訊息,最基本的就是讓不同語系的使用者可以看到屬於自己語系的訊息,像是英文語系的看到英文內容,而中文語系的可以看到中文的內容。
828
+ 國際化的英文是 Internationalization,因為單字中總共有20個字母而首尾字元分別為 'I' 與 'N',所以簡稱 I18N,國際化的目的是讓應用程式可以依地區不同而顯示不同的訊息,最基本的就是讓不同語系的使用者可以看到屬於自己語系的訊息,像是英文語系的看到英文內容,而中文語系的可以看到中文的內容。
829
829
830
830
為了在應用程式中表示一個區域,Java 提供有 java.util.Locale 類,一個 Locale 實例包括了語系資訊與區域資訊,例如 "en" 表示英文語系的國家,這個字母組合是在 ISO 639 中定義的,而區域資訊則是像 "US" 表示美國,這個字母組合則是在 ISO 3166 中定義的。
831
831
You can’t perform that action at this time.
0 commit comments