4.1k likes | 4.36k Views
Java 系列概論 網路入門程式 Java System Concepts and Network Programming 賈蓉生 胡大源 林金池 編著. 第一章 導讀 (Introduction). 1-1 簡介 1-2 本書主要內容 1-3 本書編著特色 1-4 光碟使用. 1-1 簡介. 本書是這一系列叢書的第二冊,以初學入門觀點撰寫,內容從 Java 基礎程式到網路程式,期使一位完全沒有接觸過 Java 的讀者,從陌生到熟練網路程式。. 1-2 本書主要內容. 第一篇 Java 基礎概念 (Basic Concepts)
E N D
Java系列概論 網路入門程式 Java System Concepts and Network Programming 賈蓉生 胡大源 林金池 編著
第一章導讀(Introduction) 1-1 簡介 1-2 本書主要內容 1-3 本書編著特色 1-4 光碟使用
1-1 簡介 • 本書是這一系列叢書的第二冊,以初學入門觀點撰寫,內容從Java基礎程式到網路程式,期使一位完全沒有接觸過Java的讀者,從陌生到熟練網路程式。
1-2 本書主要內容 • 第一篇 Java基礎概念(Basic Concepts) • 第二篇 網路串流(Data Stream in Network) • 第三篇 網路群播(Multi Broadcast) • 第四篇 圖型介面(GUI)與網路應用
1-3 本書編著特色 • (1) 輕鬆入門:本書以Java初學入門觀點切入網路程式設計,配合範例輕鬆解說每一指令與原始類別之用法、輕鬆入門。 • (2) 熟練實作:任何學習重點都搭配範例探討並實作,完全剖析Java網路程式。 • (3) 問題導向:協助讀者提出問題,解決問題,本書編輯問題339則(其中165則範例、174則習題)。 • (4) 原文接軌:編輯中英文索引751個(如附錄E、F),已涵蓋所有Java有關網路程式之中英文專有名詞,足夠讓讀者儲備未來閱讀原文書籍或期刊的能力。
1-4 光碟使用 • 本書隨書附光碟一片,內容有Java安裝程式(System)、範例應用程式(Program);另於出版書局附教學光碟一片,內容有教學投影(Ppt)、習題解答(Ex)、Java安裝程式(System)、範例應用程式(Program)。 • 1、Java安裝程式(System):置於光碟目錄System內,下載自昇陽(SUN) 最新6.0 Java安裝程式,讀者可依附錄A內容安裝Java。 • 2、範例應用程式(Program):置於光碟目錄Program內,配合各章節範例執行賓作。 • 3、教學投影片(Ppt):置於教學光碟目錄Ppt內,以Power Point 依本書各章節內容製作,用於堂課投影教學。 • 4、習題解答(Ex):置於教學光碟目錄Ex內,列出本書各章習題之解答。
第一篇 Java基礎概念(Basic Concepts)
第二章物件概念(Object Concepts) 2-1 簡介 2-2類別程序 2-3 新物件之產生 2-4 新物件之使用 2-5 區塊(Block) 2-6生存變數(Instance Variable) 2-7 類別變數(Class Variables) 2-8 習題(Exercises)
2-1 簡介 • Java是物件導向電腦程式語言(Object Oriented Language),在Java環境中,一個類別程序(Class Procedure) 就是一個物件。
2-2類別程序 • 一組具有某功能的程式碼是謂 “類別程序(Class Procedure)”。 • 特徵有:(1) 以 “class” 作前置提示;(2) 有類別名稱,本例是Mynumber;(3) 有功能意義,本例可於變數number儲存一個整數;(4) 使用大括號 “{ }” 作為區塊範圍。
2-3 新物件之產生 • 內建資料型態(Built Data Types) • 建構資料型態(Constructed Data Types)
2-4 新物件之使用 • 一旦新物件順利產生,即可依其特性參與程式執行
範例1:設有檔案Ex02_4.java,其功能為解釋主體類別程序之地位、與主導複製及使用檔案內其他類別程序產生的新物件。範例1:設有檔案Ex02_4.java,其功能為解釋主體類別程序之地位、與主導複製及使用檔案內其他類別程序產生的新物件。 • 01 class Mynumber { • 02 int number; • 03 } • 04 class Ex02_4 { • 05 public static void main(String[] args) { • 06 Mynumber a= new Mynumber(); • 07 a.number= 10; • 08 System.out.println("a.number= "+a.number); • 09 } • 10 }
2-5 區塊(Block) • Java程式是以區塊(Block) 為組織基礎單位,每一區塊單位以大括號涵蓋其範圍,各區塊彼此形成上下隸屬、左右同儕的關係。 • 外部區塊為上司,內部區塊為下屬,平輩而互不隸屬的區塊是為同儕。
範例2:設有檔案Ex02_5_1.java,其功能為解釋系統為了節省時間與空間,每一區塊並非隨時都存在的,只有當被執行時才存在。範例2:設有檔案Ex02_5_1.java,其功能為解釋系統為了節省時間與空間,每一區塊並非隨時都存在的,只有當被執行時才存在。 • 01 class Ex02_5_1 { • 02 public static void main(String[] args) { • 03 { int a = 3; • 04 System.out.println("Block A and a = " + a); • 05 } • 06 { int b = 5; • 07 System.out.println("Block B and b = " + b); • 08 } • 09 } • 10}
範例3:設有檔案Ex02_5_2.java,其功能為解釋兩個互不相關的區塊,可宣告相同名稱之變數。範例3:設有檔案Ex02_5_2.java,其功能為解釋兩個互不相關的區塊,可宣告相同名稱之變數。 • 01 class Ex02_5_2 { • 02 public static void main(String[] args) { • 03 { int a = 3; • 04 System.out.println("Block A and a = " + a); • 05 } • 06 { int a = 5; • 07 System.out.println("Block B and a = " + a); • 08 } • 09 } • 10 }
範例4:設有檔案Ex02_5_3.java,其功能為解釋外部區塊與內部區塊不得有相同名稱之宣告變數。範例4:設有檔案Ex02_5_3.java,其功能為解釋外部區塊與內部區塊不得有相同名稱之宣告變數。 • 01 class Ex02_5_3 { • 02 public static void main(String[] args) { • 03 { int a = 3; • 04 { int a = 5; • 05 System.out.println("a = " + a); • 06 } • 07 } • 08 } • 09 }
範例5:設有檔案Ex02_5_4.java,其功能為解釋內部區塊可使用外部區塊之宣告變數。範例5:設有檔案Ex02_5_4.java,其功能為解釋內部區塊可使用外部區塊之宣告變數。 • 01 class Ex02_5_4 { • 02 public static void main(String[] args) { • 03 { int a = 3; • 04 { int b = 5; • 05 System.out.println("a = " + a); • 06 System.out.println("b = " + b); • 07 } • 08 } • 09 } • 10 }
範例6:設有檔案Ex02_5_5.java,其功能為解釋外部區塊不得使用內部區塊之宣告變數。範例6:設有檔案Ex02_5_5.java,其功能為解釋外部區塊不得使用內部區塊之宣告變數。 • 01 class Ex02_5_5 { • 02 public static void main(String[] args) { • 03 { int a = 3; • 04 { int b = 5; • 05 } • 06 System.out.println("a = " + a); • 07 System.out.println("b = " + b); • 08 } • 09 } • 10}
2-6生存變數(Instance Variable) • 變數是源自類別程序,如果未建立成新物件,雖然已作變數宣告,變數仍因其所屬的物件不存在而無法使用,這點與其他程式語言有所不同。
範例7:設有檔案Ex02_6_1.java,其功能為解釋在類別程序內宣告之變數,無法直接使用。範例7:設有檔案Ex02_6_1.java,其功能為解釋在類別程序內宣告之變數,無法直接使用。 • 01 class Mynumber { • 02 int n; • 03 } • 04 class Ex02_6_1 { • 05 public static void main(String[] args) { • 06 n = 10; • 07 System.out.println("n = "+ n); • 08 } • 09 }
範例8:設有檔案Ex02_6_2.java,其功能為解釋非生存區塊宣告之變數,無法直接使用。範例8:設有檔案Ex02_6_2.java,其功能為解釋非生存區塊宣告之變數,無法直接使用。 • 01 class Ex02_6_2 { • 02 int a; • 03 public static void main(String[] args) { • 04 a = 5; • 05 System.out.println("a = "+ a); • 06 } • 07 }
2-7 類別變數(Class Variables) • 凡於宣告時前置static的變數,是謂 “類別變數(Class Variables)”,不需經過產生新物件的過程,即可直接被使用。
範例9:設有檔案Ex02_7_1.java,其功能為解釋類別變數之應用。範例9:設有檔案Ex02_7_1.java,其功能為解釋類別變數之應用。 • 01 class Mynumber { • 02 static int n; • 03 } • 04 class Ex02_7_1 { • 05 public static void main(String[] args) { • 06 Mynumber.n = 10; • 07 System.out.println("n = "+ Mynumber.n); • 08 } • 09 }
範例10:設有檔案Ex02_7_2.java,其功能為解釋變數在自身類別程序內宣告時,可標示所屬類別物件之名稱、或直接被使用。範例10:設有檔案Ex02_7_2.java,其功能為解釋變數在自身類別程序內宣告時,可標示所屬類別物件之名稱、或直接被使用。 • 01 class Ex02_7_2 { • 02 static int a; • 03 public static void main(String[] args) { • 04 Ex02_7_2.a = 5; • 05 System.out.println("Ex02_7_2.a = "+ Ex02_7_2.a); • 06 a = 10; • 07 System.out.println("a = "+ a); • 08 } • 09 }
第三章運算式(Expression)與流程控制(Control Flow) • 3-1 簡介 • 3-2 變數 • 3-3運算關係式(Expression) • 3-4 資料轉型(Type Conversion) • 3-5 流程控制(Control Flow) • 3-5-1 決策流程控制(Decision Control Flow) • 3-5-1-1 if…else決策 • 3-5-1-2 else if決策 • 3-5-1-3 switch…case決策 • 3-5-2廻圈流程控制(Loop Control Flow) • 3-5-2-1 while廻圈 • 3-5-2-2 do…while廻圈 • 3-5-2-3 for廻圈 • 3-6 break與continue • 3-7 習題(Exercises)
3-1 簡介 • 於Java程式中,所有被使用的記憶體(Memory) 都需作資料型態(Data Types) 之宣告(Declare),以限制該記憶體儲存資料的型態。
3-2 變數 • 內建資料型態(Built Data Types) • 建構資料型態(Constructed Data Types)
範例11:設有檔案Ex03_2.java,其功能為解釋內建資料型態、與建構資料型態之用法。範例11:設有檔案Ex03_2.java,其功能為解釋內建資料型態、與建構資料型態之用法。 • 01 class Mynumber { • 02 int i; • 03 } • 04 class Ex03_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 }
3-3運算關係式(Expression) • 設有元素值a與b,若兩者之間存在某種關係元R,即可以關係式 “aRb” 表示之。我們熟悉的關係元如:“等於(=)”、“大於(>)”、“因此(→)”、“加(+)”、“乘(×)” 等均屬之。
3-4 資料轉型(Type Conversion) • 將一個變數(Variable) 的資料型態(Data Type) 轉換成另一個資料型態,是謂 “資料轉型(Type Conversion)”,例如將byte型態之變數轉換成int型態來使用。
範例13: 設有檔案Ex03_4_1.java,其功能為解釋資料變數自動轉型之應用。 • 01 class Ex03_4_1 { • 02 public static void main (String[] argv) { • 03 byte bt; • 04 short sh; • 05 int in; • 06 long lg; • 07 float ft; • 08 double db; • 09 bt = 97; • 10 sh = bt; • 11 System.out.println("short<--byte:"+sh+"<--"+bt); • 12 in = sh; • 13 System.out.println("int<--short:"+in+"<--"+sh); • 14 lg = in; • 15 System.out.println("long<--int:"+lg+"<--"+in); • 16 ft = lg; • 17 System.out.println("float<--long:"+ft+"<--"+lg); • 18 db = ft; • 19 System.out.println("double<--float:"+db+"<--"+ft); • 20 } • 21 }
範例14: 設有檔案Ex03_4_2.java,其功能為解釋資料變數強迫轉型之應用。 • 01 class Ex03_4_2 { • 02 public static void main (String[] argv) { • 03 byte bt; • 04 short sh; • 05 int in; • 06 long lg; • 07 float ft; • 08 double db; • 09 db = 97.0; • 10 ft = (float)db; • 11 System.out.println("float<--double:"+ft+"<--"+db); • 12 lg = (long)ft; • 13 System.out.println("long<--float:"+lg+"<--"+ft); • 14 in = (int)lg; • 15 System.out.println("int<--long:"+in+"<--"+lg); • 16 sh = (short)in; • 17 System.out.println("short<--int:"+sh+"<--"+in); • 18 bt = (byte)sh; • 19 System.out.println("bt<--short:"+bt+"<--"+sh); • 20 } • 20 }
3-5 流程控制(Control Flow) • 於Java程式中,常用之流程控制為 “決策流程控制(Decision Control Flow)” 與 “廻圈流程控制(Loop Control Flow)”。前者使用if…else、else if、switch…case敘述式(Statements);後者使用while、do…while、for廻圈。
範例15: 設有int變數a = 10,試求下列片斷程式之執行結果。 • if ( a > 0) • System.out.println("執行真值敘述式: " + a); • else { • a = 20; • System.out.println(“執行偽值敘述式: ” + a); • }
範例16:設有檔案Ex03_5_1_2.java,其功能為解釋else if區塊鏈、與多重多層決策之應用。 • 01 class Ex03_5_1_2 { • 02 public static void main (String[] argv) { • 03 int a = 3; • 04 if (a == 1) • 05 System.out.println("a is 1"); • 06 else if (a == 2) • 07 System.out.println("a is 2"); • 08 else if (a == 3) • 09 System.out.println("a is 3"); • 10 else • 11 System.out.println("a is others"); • 12 } • 13 }
範例17:設有檔案Ex03_5_1_3.java,其功能為解釋switch…case區塊鏈多重多層決策之應用。範例17:設有檔案Ex03_5_1_3.java,其功能為解釋switch…case區塊鏈多重多層決策之應用。 • 01 class Ex03_5_1_3 { • 02 public static void main (String[] argv) { • 03 int a = 3; • 04 switch (a) { • 05 case 1: • 06 System.out.println("a is 1"); • 07 break; • 08 case 2: • 09 System.out.println("a is 2"); • 10 break; • 11 case 3: • 12 System.out.println("a is 3"); • 13 break; • 14 default: • 15 System.out.println("a is others"); • 16 } • 17 } • 18 }
範例18:設有檔案Ex03_5_2_1.java,其功能為解釋while廻圈之應用。範例18:設有檔案Ex03_5_2_1.java,其功能為解釋while廻圈之應用。 • 01 class Ex03_5_2_1 { • 02 public static void main (String[] argv) { • 03 int a = 1; • 04 while (a <= 3) { • 05 System.out.println("a = : " + a); • 06 a++; • 07 } • 08 } • 09 }
範例19:設有檔案Ex03_5_2_2.java,其功能為解釋do…while廻圈之應用。範例19:設有檔案Ex03_5_2_2.java,其功能為解釋do…while廻圈之應用。 • 01 class Ex03_5_2_2 { • 02 public static void main (String[] argv) { • 03 int a = 1; • 04 do { • 05 System.out.println("a = : " + a); • 06 a++; • 07 } while (a <= 3); • 08 } • 09 }
範例20:設有檔案Ex03_5_2_3.java,其功能為解釋for廻圈之應用。範例20:設有檔案Ex03_5_2_3.java,其功能為解釋for廻圈之應用。 • 01 class Ex03_5_2_3 { • 02 public static void main (String[] argv) { • 03 int a; • 04 for(a=1; a<=3; a++) • 05 System.out.println("a = : " + a); • 06 } • 07 }
3-6 break與continue • 在Java程式廻圈中,break用於跳出廻圈區塊,並且不再執行該次廻圈內之重複執行式(Iteration Expression);continue用於跳出該次廻圈,但並未跳出區塊,仍繼續執行該次廻圈內之重複執行式。
範例21:設有檔案Ex03_6_1.java,其功能為解釋break在廻圈之應用。範例21:設有檔案Ex03_6_1.java,其功能為解釋break在廻圈之應用。 • 01 class Ex03_6_1 { • 02 public static void main (String[] argv) { • 03 int a; • 04 for(a=1; a<=5; a++) { • 05 if(a==3) • 06 break; • 07 System.out.println("a = : " + a); • 08 } • 09 } • 10 }
範例22:設有檔案Ex03_6_2.java,其功能為解釋continue在廻圈之應用。範例22:設有檔案Ex03_6_2.java,其功能為解釋continue在廻圈之應用。 • 01 class Ex03_6_2 { • 02 public static void main (String[] argv) { • 03 int a; • 04 for(a=1; a<=5; a++) { • 05 if(a==3) • 06 continue; • 07 System.out.println("a = : " + a); • 08 } • 09 } • 10 }
範例23:設有檔案Ex03_6_3.java,其功能為解釋break與廻圈標籤之應用。範例23:設有檔案Ex03_6_3.java,其功能為解釋break與廻圈標籤之應用。 • 01 class Ex03_6_3 { • 02 public static void main (String[] argv) { • 03 int a, b; • 04 L1: for(a=1; a<=2; a++) { • 05 System.out.println("a = : " + a); • 06 L2: for(b=1; b<=5; b++) { • 07 if(b==3) • 08 break L2; • 09 System.out.println("b = : " + b); • 10 } • 11 } • 12 } • 13 }
範例24:設有檔案Ex03_6_4.java,其功能為解釋continue與廻圈標籤之應用。範例24:設有檔案Ex03_6_4.java,其功能為解釋continue與廻圈標籤之應用。 • 01 class Ex03_6_4 { • 02 public static void main (String[] argv) { • 03 int a, b; • 04 L1: for(a=1; a<=2; a++) { • 05 System.out.println("a = : " + a); • 06 L2: for(b=1; b<=5; b++) { • 07 if(b==3) • 08 continue L2; • 09 System.out.println("b = : " + b); • 10 } • 11 } • 12 } • 13 }
第四章方法程序(Methods) • 4-1 簡介 • 4-2方法程序(Methods) • 4-3 生存方法程序(Instance Methods) • 4-4 類別方法程序(Class Methods) • 4-5建構子(Constructor) • 4-6方法程序重載(Method Overload) • 4-7 public / private限制修飾子(Modifications) • 4-8 this代名詞 • 4-8-1 類別代名詞 • 4-8-2 建構子代名詞 • 4-9 巢狀類別(Nested Class) • 4-9-1 成員類別(Member Class) • 4-9-2 區域類別(Local Class) • 4-10 習題(Exercises)
4-1 簡介 • Java語言的方法程序(Methods),猶如其他高階語言程式中的副程式(Subroutines)或函數(Functions),是具有解決問題功能的程式區塊
4-2方法程序(Methods) • 為了方便,將常用的功能需求,先設計出一些內建副程式(Subroutine) / 函數(Function),或Java之方法程序(Methods),儲置於系統程式庫內,於爾後設計程式時,視需要,由主程式呼叫有關的副程式/函數、或方法程序,組成一個功能強大的工作群。
範例25:設有檔案Ex04_2.java,其功能為解釋主體類別程序如何呼叫使用方向程序?範例25:設有檔案Ex04_2.java,其功能為解釋主體類別程序如何呼叫使用方向程序? • 01 class Study { • 02 int credit=0; • 03 void addcredit(int i) { credit += i; } • 04 int totalcredit() { return credit; } • 05 } • 06 class Ex04_2 { • 07 public static void main(String[] args) { • 08 Study joe = new Study(); • 09 Study george = new Study ); • 10 joe.addcredit(12); • 11 george.addcredit(9); • 12 joe.addcredit(6); • 13 george.addcredit(3); • 14 System.out.println("joe studied: "+joe.totalcredit()+"credites"); • 15 System.out.println("george studied: "+george.totalcredit()+"credites"); • 16 } • 17 }
4-3 生存方法程序(Instance Methods) • 方法程序也是一樣,有其所屬之類別物件,當所屬類別物件生存時,該方法程序才可被執行使用,如此隨所屬類別物件生存而生存之方法程序是謂 “生存方法程序(Instance Methods)”。