1 / 93

課程參與度之評估方式

課程參與度之評估方式. 上課時必須專心聽講,跟上進度,參與討論 扣 分項目 玩線上遊戲一次扣 1 分 玩手機一次扣 1 分 睡覺一次扣 1 分 聊天一次扣 1 分 無法回答老師提出的問題一次扣 1 分 加分項目 主動回答老師的問題一次加 2 分 找出老師程式中的錯誤一次加 1 分 修正老師程式中的錯誤一次加 4 分. 網路程式設計 第四章 Java 語言基礎. 鄧姚文. 大綱. 類別與物件 類別的要項 - 屬性 建構子 方法 套件與存取限定修飾字 物件導向概念範例:射鵰英雄傳. 輸出入套件 byte 類別的使用 char 類別的使用

leia
Download Presentation

課程參與度之評估方式

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 課程參與度之評估方式 • 上課時必須專心聽講,跟上進度,參與討論 • 扣分項目 • 玩線上遊戲一次扣1分 • 玩手機一次扣1分 • 睡覺一次扣1分 • 聊天一次扣1分 • 無法回答老師提出的問題一次扣1分 • 加分項目 • 主動回答老師的問題一次加2分 • 找出老師程式中的錯誤一次加1分 • 修正老師程式中的錯誤一次加4分

  2. 網路程式設計第四章 Java語言基礎 鄧姚文

  3. 大綱 • 類別與物件 • 類別的要項-屬性 • 建構子 • 方法 • 套件與存取限定修飾字 • 物件導向概念範例:射鵰英雄傳 • 輸出入套件 • byte類別的使用 • char類別的使用 • byte轉換為char • 檔案存取 • Console與Scanner類別 • 例外處理

  4. 前言 JAVA 具有跨平台、物件導向與第三方類別庫豐富等特色 JAVA是一種典型的網路應用程式的語言 java.io完整支援輸入與輸出資料流 java.net網路相關類別庫 java.lang.Thread支援多執行緒 快速設計網路應用程式

  5. 4-1 類別與物件 01 package com.ch04; 02 03 public class HelloWorld { 04 public static void main(String[] args) { 05 System.out.println("hello world."); 06 } 07 } • Java語言的基礎要項是「類別(class)」 • 類別的終極目的: • 方便自己或其他人「重覆使用」! • Reusable

  6. 4-1 類別與物件 hello world. public static void main(String[] args) 標示程式的進入點 執行的結果印出「hello world」字樣:

  7. Signature(簽章) • Signature(簽章)為副程式的識別依據 • 包括存取限定、傳回型別、副程式名稱、參數型別與數量。 • JAVA稱副程式為『方法』(Method) • 兩個不同的方法 • public static int max(int x, int y) • public static double max(double x, double y) • 兩個相同的方法 • public static int max(int x, int y) • public static int max(int a, int b)

  8. 4-1 類別與物件 01 package com.ch04; 02 03 public class BMI { 04 public static void main(String[] args) { 05 float w = 65f; 06 float h = 1.7f; 07 floatbmi = w / (h*h); 08 System.out.println("身體質量指數BMI為:"+bmi); 09 } 10 } • 計算一個人的BMI指數,公式: • 體重(kg)/ 身高(m)2 • 假如體重為65公斤(變數w),身高是170公分(變數h)

  9. 4-1 類別與物件 身體質量指數BMI為:22.491348 • 計算一個人的BMI指數 • 類別被執行時會從第5行循序執行到第8行,第7行計算BMI指數得到結果後放入變數bmi,最後第8行印出bmi的結果: • 這樣的程式雖然達到了需求,但是卻不方便日後自己或其他人重覆使用 • 只能複製程式碼區塊去使用,當日子一久,可能也忘記變數w、h的用途是什麼了。

  10. 4-1 類別與物件 • 物件 • 依照設計圖(藍圖)建造出實物(豪宅) • 能利用同一張藍圖,再去別的地點建造另一棟豪宅 • 類別就是設計圖

  11. 4-1 類別與物件 • 物件 • 依照藍圖,將「實例」建造生成出來,然後才能夠使用,而實例就是Java語言中的「物件」 • 設計好類別應有的資訊或動作後,再依照類別產生出可使用的物件去解決問題

  12. 4-2 類別的要項-屬性(Property) 01 package com.ch04; 02 03 public class Person { 04 float weight; 05 float height; 06 } • 例如豪宅的藍圖會加入大門的顏色、樓層數、樓高與門牌號碼等資訊 • 設計一個類別「Person」代表一個人 • Person類別身上有兩個屬性 • float浮點數weight與hieght

  13. 4-2 類別的要項-屬性(Property) 01 package com.ch04; 02 03 public class Person { 04 float weight; 05 float height; 06 public static void main(String args[]){ 07 Person p = new Person(); 08 } 09 } 在main方法中,利用new關鍵字將Person類別的物件產生出來:

  14. 4-2 類別的要項-屬性(Property) Person類別是一個可以重複使用的設計圖 new Person()-讀取Person類別檔後,執行建構子並建立實體的物件。

  15. 4-2 類別的要項-屬性(Property) • 存取點數 • 用小數點「.」存取物件的屬性

  16. 4-2 類別的要項-屬性(Property) 01 package com.ch04; 02 03 public class Person { 04 float weight; 05 float height; 06 public static void main(String args[]){ 07 Person p = new Person(); 08 p.height = 170; 09 p.weight = 65; 10 } 11 } • 存取點數 • 將height與weight設定為170與65:

  17. 4-2 類別的要項-屬性(Property) • 產生物件並設定初始值要 3 行程式 • 能不能夠減少為 1 行程式呢? • 下一節「建構子」

  18. 4-3 建構子 • Constructor,又譯為:建構式、建構方法 • 類別生成物件時會自動執行搭配的建構子 • 方法的名稱和類別的名稱相同,沒有傳回型別 • 用途:設定初值或撰寫必要初始化工作 • 當類別中沒有任何建構子時,Java自動給予一個無參數的建構子 • Default Constructor 預設建構子 • 若類別已經有建構子,則不奉送預設建構子!

  19. 4-3 建構子 01 package com.ch04; 02 03 public class Person { 04 float weight; 05 float height; 06 public Person(){ 07 weight = 0; 08 height = 0; 09 } 10 } 建構子是位在類別區塊內的第一階層,與屬性相同,都是屬於類別的元素。 建構子擁有自己的程式區塊,以大括號包圍著,以下是Person類別的建構子:

  20. 4-3 建構子 03 public class Person { 04 float weight; 05 float height; 06 public Person(){ 07 weight = height = 0; 08 } 09 public Person(intw, int h){ 10 weight = w; height = h; 11 } 12 } • 建構子的重載(Overloading,又譯為多載) • 設計許多個建構子,適用於各種情況 • 兩個建構子的Person

  21. 4-3 建構子 • 建構子的重載(overloading) • 接收「參數(parameters)」 • 將參數的型態與變數名稱放在建構子的小括號內(如int w) • 參數值會跟著使用者傳入時不同而改變 • 變數w是在建構子內的區域變數

  22. 4-3 建構子 03 public class Person { 04 float weight; 05 float height; 06 public Person(){ 07 weight = 0; 08 height = 0; 09 } 10 public Person(float w, float h){ 11 weight = w; 12 height = h; 13 } 14 15 public static void main(String args[]){ 16 Person p = new Person(65, 170); 17 // Person p = new Person(); 18 // p.height = 170; 19 // p.weight = 65; 20 } 21 }

  23. 4-3 建構子 • 建構子的重載(overloading) • 接收「參數(parameters)」 • 因為Person類別在設計時提供了第二個可傳入體重w與身高h的建構子(第10至13行),所以使用者在生成物件時(第16行)即可使用此建構子,以達到簡易能夠生成物件並同時指定初值的目的。

  24. 4-3 建構子 Person(float w, float h){ } Person(float w, int h){ } Person(float w){ } Person(float h){ } • 重載的限制 • 重載建構子時,各個建構子的傳入參數必需有差異性,也就是說各個建構子的傳入參數型態或個數必需是不一樣的。 • 以下幾個範例都可以成為Person類別的建構子:

  25. 4-3 建構子 • 重載的限制 • 重載的辨識與變數的名稱無關,主要是以參數個數與參數的型態的組合為辨識其合法與否的標準。

  26. 4-4 方法(Method) • 將程式敍述或運算的邏輯程式碼集合在一個區塊中,並賦予該區塊一個方法名稱 • 相當於C語言的 Function • 呼叫該方法名稱即可執行這些被集中起來的程式碼 • 意義上是「功能」或「動作」

  27. 4-4 方法 • 存取修飾字 回傳值型別 方法名稱(參數 [,參數2, 參數3]){ • 程式碼 • } • 方法的設計 • 方法的規格 • 存取修飾字 • 限定可呼叫該方法的對象 • public 開放公眾皆可使用 • private 限定在此類別內使用

  28. 4-4 方法 • 方法的設計 • 回傳值型別 • 執行完成時回傳結果的資料型別 • void 標示不回傳任何值 • 方法名稱 • 名稱的字首不能使用數字,通常慣例是使用小寫英文,若方法名稱是兩個英文字所組成時,第一個英文字以後,每個字首字母應為大寫 • 例如sayHello()、getHeight()或setMailNotification()等

  29. 4-4 方法 public void sayHello(String name){ System.out.println("hello"+name); } • 傳入參數 • 兩個參數之間以逗號分隔 • 一個參數應具備參數資料型態與該參數的變數名稱 • float w • int count • String str • 一個印出"hello"的方法sayHello:

  30. 4-4 方法 public float getBmi(float weight, float height){ float bmi = weight / (height * height); return bmi; } • 回傳值 • 方法運作中途或結束時,以return關鍵字回傳一個回傳值 • getBmi計算BMI身體質量指數的方法

  31. 4-4 方法 • getter 和 setter • 用於存取物件屬性 • 將成員變數設定為 private,透過 getter 與 setter 存取屬性值,避免屬性值遭到破壞!

  32. 練習 • 完成 Person 類別的設計 • 屬性: • 姓名、性別、身高、體重 • 方法: • getBmi() 計算 BMI • toString() 印出個人摘要資訊,例如: • 許蓋功 先生 身高 180 公分,體重 70 公斤,BMI = 21.6 • 俞琍珮 小姐 身高 170 公分,體重 60 公斤,BMI = 20.8 • 提示: • Eclipse 和 NetBeans都有自動產生 getter 和 setter 的功能 • 以 NumberFormat的 setMaximumFractionDigits(1) 設定小數點以下顯示 1 位,以 setRoundingMode(RoundingMode.HALF_UP) 設定四捨五入

  33. 4-5 套件與存取限定修飾字 • 套件(類別庫) • 套件package在Java語言指的是類別的分類目錄 • 套件名稱=目錄結構 • 以『公司網域名稱倒著寫』作為套件名稱,就不會和別人的類別混在一起 • 類別愈來愈多時,就必需要為其分類 • 假設一家公司名稱為jsoft,它的套件目錄可以設定為com.jsoft • jsoft公司內有關輸出入的類別可以放在com.jsoft.io套件內

  34. 4-5 套件與存取限定修飾字 package com.ch04; public class Person { float weight; float height; (省略) } • 套件(類別庫) • 套件的指定必需放在類別區塊外的第一行,例如Person類別就放在com.ch04套件中,類別的全名則是com.ch04.Person:

  35. 4-5 套件與存取限定修飾字 • 存取限定修飾字 • 把子類別比喻為子女,同一個套件內的類別比喻為朋友,而此兩種以為的稱之為外人 • 利用public、private、protected與未定義任何修飾字四種方式,可以為屬性與方法訂定存取模式 • public:所有對象皆能自由存取該屬性。 • private:除了類別內部能夠存取外,其他皆無法存取。 • protected:類別內部、子女及朋友都能存取,但外人無法存取該屬性 • default(又稱預設,不寫任何修飾字):只能被類別內部與朋友存取,其子女與外人皆不能存取。

  36. 4-6 射鵰英雄傳 導演想拍攝一幕「洪七公說了一聲看招後,使出降龍十八掌」的戲,該如何做? 導演應該先設計好洪七公這個角色,再找一個場地與演員來真實地演出這場戲。 設計階段就是類別的設計,真實演出時,就是產生物件並呼叫方法。

  37. 4-6 射鵰英雄傳 • 設計構思階段 • 洪七公是人,人都有姓名與體力 • 先設計「人」類別 • 日後若有其他角色時,可以重覆使用。 • 「洪七公」類別繼承「人」的特色 • 為「人」類別設計姓名與體力兩個屬性,又加了一個方法「說」,這個方法可以接收一個字串後印出。

  38. package com.ch04; public class 人 { String 姓名; int體力 = 100; public void 說(String words){ System.out.println(姓名+"說:"+words); } }

  39. 4-6 射鵰英雄傳 • 設計構思階段 • 接著設計洪七公類別 • 『洪七公』是一種『人』 • 透過繼承(extends)取得『人』的屬性與方法 • 將洪七公繼承了「人」類別,並設定其姓名,由於練武之人體力較佳,因此應改變父類別(人)的體力為200。 • 又因洪七公擁有絕世武功,新增了一個新的方法叫「降龍十八掌」,類別設計如下:

  40. 洪七公 package com.ch04; public class 洪七公 extends 人 { public 洪七公() { 姓名 = "洪七公"; 體力 = 200; } public void 降龍十八掌(){ System.out.println(姓名+"發出陣陣掌風,使出降龍十八掌"); } }

  41. 4-6 射鵰英雄傳 • 演出階段 • 接下來可以演出「洪七公說了一聲看招後,使出降龍十八掌」這幕戲了 • 新增一個具有main方法,可測試的類別叫Tester,用來演出這場戲。 • 先以一個演員hong,依照劇本所設計的洪七公來演出:

  42. 演出階段 package com.ch03; public class Tester { public static void main(String[] args) { 洪七公 hong = new 洪七公(); hong.說("看招"); hong.降龍十八掌(); } } 洪七公說:看招 洪七公發出陣陣掌風,使出降龍十八掌 • 執行結果

  43. 4-6 射鵰英雄傳 • 進階設計 • 假如的需求是設計有關遊戲的對戰,遊戲中有歐陽峰與洪七公兩個角色 • 歐陽峰擁有體力180,內力值是400,發出蛤蟆功後自己會降低體力值40與內力值50,而對方會失去體力值80。 • 洪七公擁有的體力是200,內力值是500,發出降龍十八掌時自己會降低體力值60與內力值80,而對方會失去體力值120。整理如下表:

  44. 角色特徵

  45. 4-6 射鵰英雄傳 • 進階設計 • 類別圖:

  46. 4-6 射鵰英雄傳 package com.ch04; public class 洪七公 extends 人 { int內力 = 500; public 洪七公() { 姓名 = "洪七公"; 體力 = 200; } public void 降龍十八掌(){ System.out.println(姓名+"發出陣陣掌風,使出降龍十八掌"); } public void 降龍十八掌(人 p){ System.out.println(姓名+"發出陣陣掌風,使出降龍十八掌打向 "+p.姓名); 體力 = 體力 - 60; 內力 = 內力 - 80; p.體力 = p.體力 - 120; System.out.println(" 對手"+p.姓名+"體力剩餘:"+p.體力); } }

  47. 4-6 射鵰英雄傳 package com.ch04; public class 歐陽峰 extends 人 { int內力 = 400; public 歐陽峰() { 姓名 = "歐陽峰"; 體力 = 180; } public void 蛤蟆功(){ System.out.println(姓名+"發出呱呱怪聲,使出蛤蟆功"); } public void 蛤蟆功(人 p){ System.out.println(姓名+"發出呱呱怪聲,使出蛤蟆功打向"+p.姓名); 體力 = 體力 - 40; 內力 = 內力 - 50; p.體力 = p.體力 - 80; System.out.println(" 對手"+p.姓名+"體力剩餘:"+p.體力); } }

  48. 4-6 射鵰英雄傳 package com.ch04; public class Tester2 { public static void main(String[] args) { 洪七公 hong = new 洪七公(); 歐陽峰 oyan = new 歐陽峰(); oyan.蛤蟆功(hong); hong.降龍十八掌(oyan); } } 歐陽峰發出呱呱怪聲,使出蛤蟆功打向洪七公 對手洪七公體力剩餘:120 洪七公發出陣陣掌風,使出降龍十八掌打向歐陽峰 對手歐陽峰體力剩餘:20 • 實際操作程式 • 執行結果

  49. 4-7 輸出入套件 • Java 語言提供許多類別做 I/O(Input / Output)輸入與輸出 • java.io 類別庫 • 輸出入的類別像是「管路」 • 不同的管路可供處理不同的需求功能

  50. 4-7 輸出入套件 • 輸出入類別 • 分為以byte或char來處理的類別

More Related