3.49k likes | 3.73k Views
Java 系列概論 Java System Concepts. 基礎入門程式 Basic Programming. 自 1990 年昇陽開始研發 Java 以來,至今 Java 儼然已成為最具網路潛力的程式語言。目前大多數之網路線上遊戲、網路銀行都是以 Java 撰寫而成。 筆者感慨到,我們不知道自己以後會有多大的成就,也許是大企業家、大科學家、或是政治家,但有一點可以確定的,只要從事電腦工作,我們就一定會應用到 Java ,統計目前市場上網路應用之產品, 70% 以上是由 Java 撰寫,聽起來似有些誇張,但事實就是如此。
E N D
Java系列概論Java System Concepts 基礎入門程式 Basic Programming
自1990年昇陽開始研發Java以來,至今Java儼然已成為最具網路潛力的程式語言。目前大多數之網路線上遊戲、網路銀行都是以Java撰寫而成。自1990年昇陽開始研發Java以來,至今Java儼然已成為最具網路潛力的程式語言。目前大多數之網路線上遊戲、網路銀行都是以Java撰寫而成。 • 筆者感慨到,我們不知道自己以後會有多大的成就,也許是大企業家、大科學家、或是政治家,但有一點可以確定的,只要從事電腦工作,我們就一定會應用到Java,統計目前市場上網路應用之產品,70%以上是由Java撰寫,聽起來似有些誇張,但事實就是如此。 • 最近美國市場最熱門的I-phone被批評有瑕疵,原因是Java不是MacOS系統之強項,由此也可看出,Java在網路系列應用之重要性。
本書特色 (1) 輕鬆入門:本書以初學入門觀點切入,配合範例輕鬆解說、輕鬆學習。 (2) 熟練實作:學習重點搭配範例實作,再以SCJP認證模擬試題重複演練,完全剖析Java。 (3) 問題導向:幫助讀者提出問題,解決問題,編輯問題640則(其中223則範例、146則習題、271則認證模擬試題)。 (4) 原文接軌:編輯中英文索引537個,涵蓋所有Java之中英文專有名詞,足夠讓讀者儲備閱讀原文書籍的能力。
第一章 導讀(Introduction)
1-1 簡介 • Java是由C++ 淵源發展而成,1990年昇陽(Sun Microsystems) 為發展資訊應用(Information Appliance) 成立 “綠色(Green)” 小組,主要研發消費性家電之控制語言,小組成員James Gosling因研究室窗外的橡樹將軟體最初取名為“Oak”,因Oak已被其他公司採用為商標,改以悠閒且不離手的咖啡感覺將軟體定名為“Java”。 • 1995年,昇陽正式公開 “Java Applet” 上市,主要用於網頁與使用者間互動的小程式,爾後再經過努力開發,至今Java儼然已成為最具網路潛力的程式語言。目前大多數之網路線上遊戲、網路銀行都是以Java撰寫而成。
1-2 Java系統架構 Java的系統架構可類分為3組區塊: (1) 使用者程式區塊(User’s Program Component), (2) 應用程式介面區塊(API Application Programming Interface Component), (3) 虛擬機器區塊(Virtual Machine Component)。
1-4 Java特性 1、精緻簡單(Simple):不需大容量儲存記憶體、或龐大套裝應用軟體,Java類別程式(xxx.class) 可直接搭配系統內建方法程序(Methods) 執行有關功能。 2、物件導向(Object Oriented):物件關係是最接近我們人類的邏輯思維,以物件為問題標的,將容易模擬我們解決問題的方法。 3、跨平台(Cross Platforms):如圖1-2-3,Java可依附各種作業系統平台執行,不受執行環境之限制。 4、編譯(Compiler)/直譯(Interpreter):如圖1-3-1,Java原始程式(xxx.java) 經過編譯器產生機器碼(xxx.class),再搭配Java API程式以直譯方式執行。因有編譯過程,故一次執行,到處使用;因是直譯執行,故迅速便捷。 5、安全(Secure):提供周嚴保護措施,且無指標(Pointer) 應用,充分保護記憶體資料之安全。 6、網路功能(Network Functions):不必架設網站,Java程式碼本身就有網路功能,直接執行網路資料傳輸。
1-5 Java版本 1 企業版J2EE (Java2 Enterprise Edition) 提供企 業伺服端應用; 2 標準版J2SE (Java2 Standard Edition) 提供一般程式開發應用; 3 微電腦版J2ME (Java2 Micro Edition) 提供微電腦應用,如手機、PDA、資訊家電等之開發。
1-6 Java認證 1 程式設計師認證SCJP(Sun Certified Programmer for Java2 Platform):認證對象為Java程式設計師(Programmer)。 2 研發工程師認證SCJD(Sun Certified Developer for Java2 Platform):認證對象為Java研發工程師(Developer),必須先取得SCJP認證資格者,才可參加本項認證測驗。 3 網路研發工程師認證SCWD(Sun Certified Web Component Developer for Java2 Enterprise Edition J2EE Platform):認證對象為Java Web網路研發工程師(Web Developer),必須先取得SCJP認證資格者,才可參加本項認證測驗。 4 企業結構工程師認證SCAJ(Sun Certified Enterprise Architect for Java2 Technology):為Java之最高級認證,認證對象為Java結構工程師,不須先取得其他認證資格,有PartⅠ、PartⅡ、PartⅢ 三項測驗,必須三項全部通過才可取得證照。
第三章 Java程式基礎架構與元素
3-1 簡介 • 撰寫Java程式,也與撰寫其他語言程式一樣,有其自己的架構元素與格式,本章將以初學入門的觀點,先認識一個簡易Java程式的組成架構與元素。 • 對初學者來言,Java程式之基礎架構有程式名稱、執行區塊、執行起始點、敘述、與符號;Java程式之基礎組成元素有 “類別程序(Class Procedures)”,亦即 “物件(Objects)”。
3-2 Java基礎架構 • 1、程式名稱(Names) • 2、執行區塊(Blocks) • 3、執行起始點(Execution Start) • 4、敘述(Statements) • 5、符號(Signs)。
3-3 Java基礎元素 • 在Java環境中,一個類別程序(Class Procedure) 就是一個物件。 • Java檔案包含多個類別程序,這些類別程序組成的物件,亦就是Java檔案的基礎元素,也是我們學習Java的起始點。
類別程序 • 1 class MyfirstJava{ • 2 public static void main(String[ ] args){ • 3 System.out.println("My first Java program"); • 4 } • 5 }
3-4 關鍵字(Key words) • Java系統有一些關鍵字(Key words),讀者在學習之初應先作認識。這些字有特殊之意義,於編輯程式時除了用在其允許的位置,不得用於其他地方。同時關鍵字也是SCJP的常考題。常用關鍵字之數量並不多,各字之有關意義與用法,將於爾後詳細介紹。
第四章 變數宣告(Variables)
4-1 簡介 • 於Java程式中,所有被使用的記憶體(Memory) 都需作資料型態(Data Types) 之宣告(Declare),以限制該記憶體儲存資料的型態。 • 宣告如int a 時,設定記憶體名稱為a,用於儲存整數(integer);宣告如char b 時,設定記憶體名稱為b,用於儲存字元(character)。
範例7:變數與物件之用法。 • 01 class Mynumber { • 02 int i; • 03 } • 04 class Ex04_1_1 { • 05 public static void main(String[] args) { • 06 int j; • 07 Mynumber a; • 08 j = 3; • 09 a = 5; • 10 System.out.println("j = "+j); • 11 System.out.println("a = "+a); • 12 } • 13 }
範例8:內建資料型態、與建構資料型態之用法。範例8:內建資料型態、與建構資料型態之用法。 • 01 class Mynumber { • 02 int i; • 03 } • 04 class Ex04_1_2 { • 05 public static void main(String[] args) { • 06 int j; • 07 Mynumber a; • 08 j=3; • 09 a = new Mynumber(); • 10 a.i = 5; • 11 System.out.println("j = "+j); • 12 System.out.println("a.i = "+a.i); • 13 } • 14 }
範例9:字元(char) 變數宣告。 • 01 class Ex04_2_1 { • 02 public static void main (String[] argv) { • 03 char ch; • 04 ch = 'A'; • 05 System.out.println(“英文字母= ”+ch); • 06 ch = '\u0041'; • 07 System.out.println(“Unicode碼= ”+ch); • 08 ch = 65; • 09 System.out.println(“ASCII十進位碼= ”+ch); • 10 ch = '中'; • 11 System.out.println(“中文字元= ”+ch); • 12 ch = '\u4E2D'; • 13 System.out.println(“中文Unicode碼= ”+ch); • 14 ch = 20013; • 15 System.out.println(“中文十進位碼= ”+ch); • 16 ch = '\0'; • 17 System.out.println("特殊字元之空字元= "+ch); • 18 } • 19 }
範例10:位元組整數(byte) 變數宣告。 • 01 class Ex04_2_2 { • 02 public static void main (String[] argv) { • 03 byte bt; • 04 bt = 65; • 05 System.out.println("數值= "+bt); • 06 bt = 'A'; • 07 System.out.println("字母A之ASCII十進位碼= "+bt); • 08 bt = '\0'; • 09 System.out.println("特殊字元之空字元碼= "+bt); • 10 } • 11 }
範例11:短整數(short) 變數宣告 • 01 class Ex04_2_3 { • 02 public static void main (String[] argv) { • 03 short st; • 04 st = 65; • 05 System.out.println("一般數值= "+st); • 06 st = 'A'; • 07 System.out.println("字母A之ASCII十進位碼= "+st); • 08 st = '中'; • 09 System.out.println("中文字元十進位碼= "+st); • 10 st = '\0'; • 11 System.out.println("特殊字元之空字元碼= "+st); • 12 } • 13 }
範例12:整數(int) 之變數宣告 • 01 class Ex04_2_4 { • 02 public static void main (String[] argv) { • 03 int in; • 04 in = 65; • 05 System.out.println(“一般數值= ”+in); • 06 in = 'A'; • 07 System.out.println(“英文字母執行結果= ”+in); • 08 in = '中'; • 09 System.out.println(“中文字元執行結果= ”+in); • 10 in = '\u4E2D'; • 11 System.out.println(“Unicode執行結果= ”+in); • 12 in = 047055; • 13 System.out.println(“八進位執行結果= ”+in); • 14 in = 0x4E2D; • 15 System.out.println(“十六進位執行結果= ”+in); • 16 in = '\0'; • 17 System.out.println("特殊字元執行結果= "+in); • 18 } • 19 }
範例13:長整數(long) 之變數宣告,以一個大於int資料型態範圍長度之數值為指定值,觀察發生錯誤的原因。 • 01 class Ex04_2_5 { • 02 public static void main (String[] argv) { • 03 long lng; • 04 lng = 0xFFFFFFFFF; • 05 System.out.println("最右端無L之長整數= "+lng); • 06 } • 07 }
範例14:長整數(long) 之變數宣告,於指定值最右端加置“L”,觀察其執行結果。 • 01 class Ex04_2_5 { • 02 public static void main (String[] argv) { • 03 long lng; • 04 lng = 0xFFFFFFFFFL; • 05 System.out.println("最右端為L之長整數= "+lng); • 06 } • 07 }
範例15:浮點之變數宣告,當float變數指定值之最右端未加置“F ” 或 “f ” 時,觀察發生錯誤的原因。 • 01 class Ex04_2_6 { • 02 public static void main (String[] argv) { • 03 float ft; • 04 double dft; • 05 ft = 120.5; • 06 System.out.println(“float指定值= ”+ft); • 07 ft = 1.205E2; • 08 System.out.println(“float指定值= ”+ft); • 09 ft = 12050E-2; • 10 System.out.println(“float指定值= ”+ft); • 11 dft = 120.5; • 12 System.out.println(“double指定值= ”+dft); • 13 dft = 1.205E2; • 14 System.out.println(“double指定值= ”+dft); • 15 dft = 12050E-2; • 16 System.out.println("double指定值= "+dft); • 17 } • 18 }
範例16:浮點之變數宣告,當float變數指定值之最右端加置“F ” 或 “f ” 時,觀察其執行結果。 • 01 class Ex04_2_6 { • 02 public static void main (String[] argv) { • 03 float ft; • 04 double dft; • 05 ft = 120.5f; • 06 System.out.println(“float指定值= ”+ft); • 07 ft = 1.205E2f; • 08 System.out.println(“float指定值= ”+ft); • 09 ft = 12050E-2f; • 10 System.out.println(“float指定值= ”+ft); • 11 dft = 120.5; • 12 System.out.println(“double指定值= ”+dft); • 13 dft = 1.205E2; • 14 System.out.println(“double指定值= ”+dft); • 15 dft = 12050E-2; • 16 System.out.println("double指定值= "+dft); • 17 } • 18 }
範例17:布林值之變數宣告。 • 01 class Ex04_2_7 { • 02 public static void main (String[] argv) { • 03 boolean bn; • 04 bn = true; • 05 System.out.println("boolean指定值= "+bn); • 06 bn = false; • 07 System.out.println("boolean指定值= "+bn); • 08 } • 09 }
4-3 參考資料型別(Reference Types) • 宣告之變數若無確定之長度,該變數型態是謂 “參考型別(Reference Types)”。常用於Java程式中者有三類:矩陣、字串、與建構物件。有關建構物件變數之宣告,請參考範例7與範例8。
範例18:矩陣之變數宣告。 • 01 class Mynumber { • 02 int number; • 03 } • 04 class Ex04_3_1_1 { • 05 public static void main(String[] args) { • 06 int[ ] a; • 07 Mynumber[ ] b; • 08 a = new int[2]; • 09 a[0] = 10; • 10 a[1] = 20; • 11 System.out.println("a[0] = "+a[0]); • 12 System.out.println("a[1] = "+a[1]);
範例18:續 • 13 b = new Mynumber[2]; • 14 b[0] = new Mynumber(); • 15 b[1] = new Mynumber(); • 16 b[0].number = 30; • 17 b[1].number = 40; • 18 System.out.println("b[0].number= "+b[0].number); • 19 System.out.println("b[1].number= "+b[1].number); • 20 } • 21 }
範例19:矩陣之變數宣告、及使用大括號 “{ }” 設定矩陣各元素之指定值。 • 01 class Ex04_3_1_2 { • 02 public static void main (String[] argv) { • 03 int[ ] f = {10,20}; • 04 int[ ] g; • 05 g = new int[ ] {30,40}; • 06 System.out.println("f[0] = "+f[0]); • 07 System.out.println("f[1] = "+f[1]); • 08 System.out.println("g[0] = "+g[0]); • 09 System.out.println("g[1] = "+g[1]); • 10 } • 11 }
範例20:對稱多維矩陣變數之宣告。 • 01 class Mynumber { • 02 int n; • 03 } • 04 class Ex04_3_2_1_1 { • 06 public static void main(String[] args) { • 07 int[ ][ ] a; • 08 Mynumber[ ][ ] b; • 09 a = new int[2][2]; • 10 a[0][0] = 10; • 11 a[0][1] = 20; • 12 a[1][0] = 30; • 13 a[1][1] = 40; • 14 System.out.println("a[0][0] = "+a[0][0]); • 15 System.out.println("a[0][1] = "+a[0][1]); • 16 System.out.println("a[1][0] = "+a[1][0]); • 17 System.out.println("a[1][1] = "+a[1][1]);
範例20:續 • 18 b = new Mynumber[2][2]; • 19 b[0][0] = new Mynumber(); • 20 b[0][1] = new Mynumber(); • 21 b[1][0] = new Mynumber(); • 22 b[1][1] = new Mynumber(); • 23 b[0][0].n = 50; • 24 b[0][1].n = 60; • 25 b[1][0].n = 70; • 26 b[1][1].n = 80; • 27 System.out.println("b[0][0].n = "+b[0][0].n); • 28 System.out.println("b[0][1].n = "+b[0][1].n); • 29 System.out.println("b[1][0].n = "+b[1][0].n); • 30 System.out.println("b[1][1].n = "+b[1][1].n); • 31 } • 32 }
範例21:對稱多維矩陣變數之宣告、及使用大括號 “{ }” 設定矩陣各元素之指定值。 • class Ex04_3_2_1_2 { • public static void main (String[] argv) { • int[][] a = {{10,20},{30,40}}; • System.out.println("a[0][0] = "+a[0][0]); • System.out.println("a[0][1] = "+a[0][1]); • System.out.println("a[1][0] = "+a[1][0]); • System.out.println("a[1][1] = "+a[1][1]); • } • }
範例22:非對稱多維矩陣變數宣告。 • 01 class Ex04_3_2_2_1 { • 02 public static void main(String[] args) { • 03 int[ ][ ] a; • 04 a = new int[2][ ]; • 05 a[0] = new int[2]; • 06 a[1] = new int[3]; • 07 a[0][0] = 10; • 08 a[0][1] = 20; • 09 a[1][0] = 30; • 10 a[1][1] = 40; • 11 a[1][2] = 50; • 12 System.out.println("a[0][0] = "+a[0][0]); • 13 System.out.println("a[0][1] = "+a[0][1]); • 14 System.out.println("a[1][0] = "+a[1][0]); • 15 System.out.println("a[1][1] = "+a[1][1]); • 16 System.out.println("a[1][2] = "+a[1][2]); • 17 } • 18 }
範例23:非對稱多維矩陣變數之宣告、及使用大括號 “{ }” 設定矩陣各元素之指定值。 • 01 class Ex04_3_2_2_2 { • 02 public static void main (String[] argv) { • 03 int[ ][ ] a = {{10,20},{30,40,50}}; • 04 System.out.println("a[0][0] = "+a[0][0]); • 05 System.out.println("a[0][1] = "+a[0][1]); • 06 System.out.println("a[1][0] = "+a[1][0]); • 07 System.out.println("a[1][1] = "+a[1][1]); • 08 System.out.println("a[1][2] = "+a[1][2]); • 09 } • 10 }
範例24:字串之變數宣告。 • 01 class Ex04_3_2 { • 02 public static void main (String[] argv) { • 03 String s; • 04 s = "abcd"; • 05 System.out.println("s = "+s); • 06 s = new String("wxyz"); • 07 System.out.println("s = "+s); • 08 } • 09 }
第五章 運算關係式(Expression)
5-1 簡介 • 電腦系統對我們人類之意義,可廣義歸納為:資料儲存(Store)、資料運算(Calculation)、與資料傳輸(Transmission)。可見運算是電腦系統之一個重要環節,本章將就Java之狹義運算式(Expressions) 作詳細探討。 • 於離散數學曾定義:設有元素值a與b,若兩者之間存在某種關係元R,即可以關係式 “aRb” 表示之。我們熟悉的關係元如:“等於(=)”、“大於(>)”、“因此(→)”、“加(+)”、“乘(×)” 等均屬之。 • Java程式中之大部份敘述式(Statements),都是由運算關係式(Expressions) 所組成。運算關係式(Expressions)包括 “運算值(Operands)”與 “運算元(Operators)”,如2+3,運算值為2與3,運算元為+。
5-2 指定運算元(Assignment Operators) • 指定運算元以等號 “=” 表示之,等號之左端為變數(Variable),右端為指定值(Assign Value)。系統將右端之指定值給予左端之變數,指定值可以是一個數值、可以是一個變數、亦可以是一個運算式。
範例25:指定運算元之應用。 • 01 class Ex05_2 { • 02 public static void main (String[] argv) { • 03 int a, b, c, d; • 04 a = 15; • 05 b = 'A'; • 06 System.out.println("數值a = "+a); • 07 System.out.println("字元值b = "+b); • 08 c = b; • 09 System.out.println("變數值c = "+c); • 10 d = a + b; • 11 System.out.println("運算式值d = "+d); • 12 } • 13 }
5-3 算術運算元(Arithmetic Operators) • 算術運算元包括:加、減、乘、除、餘數,分別以+、-、*、/、% 表示之,其運算值之資料型態必需為{ byte, int, short, long, float, double},否則無法計算,有關資料型態之轉換,將於爾後再詳述。
範例26:算術運算元之應用。 • 01 class Ex05_3_1 { • 02 public static void main (String[] argv) { • 03 int a = 15, b = 2, c; • 04 c = a + b; • 05 System.out.println(“加法值c = ”+c); • 06 c = a - b; • 07 System.out.println(“減法值c = ”+c); • 08 c = a * b; • 09 System.out.println(“乘法值c = ”+c); • 10 c = a / b; • 11 System.out.println(“除法值c = ”+c); • 12 c = a % b; • 13 System.out.println("餘數值c = "+c); • 14 } • 15 }
範例27:算術運算元與複合等號之應用。 • 01 class Ex05_3_2 { • 02 public static void main (String[] argv) { • 03 int a, b = 2; • 04 a = 15; • 05 a += b; • 06 System.out.println("加法值a = "+a); • 07 a = 15; • 08 a -= b; • 09 System.out.println("減法值a = "+a);