1 / 36

第八單元

第八單元. 方法的開發與使用. 單元概論. 單元目標: 描述方法 (method) 的優點以及定義如何定義 worker method 與 calling method 宣告以及叫用方法 比較物件與靜態方法 (static method) 方法的覆載 (overloaded method) 問題與討論. 方法的建立與叫用. 語法: [ modifiers ] return_type method_identifier ([ arguments ]) { method_code_block }. 方法最簡易的形式. 範例:

dick
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. 第八單元 方法的開發與使用

  2. 單元概論 • 單元目標: • 描述方法(method)的優點以及定義如何定義worker method與calling method • 宣告以及叫用方法 • 比較物件與靜態方法(static method) • 方法的覆載(overloaded method) • 問題與討論

  3. 方法的建立與叫用 • 語法: [modifiers] return_type method_identifier ([arguments]) { method_code_block }

  4. 方法最簡易的形式 • 範例: public void displayShirtInformation() { System.out.println("Shirt ID: " + shirtID); System.out.println("Shirt description:" + description); System.out.println("Color Code: " + colorCode); System.out.println("Shirt price: " + price); System.out.println("Quantity in stock: " +quantityInStock); } // display方法的結尾

  5. 從不同的類別中叫用方法 • 範例: 1 public class ShirtTest { 2 3 public static void main (String args[]) { 4 5 Shirt myShirt; 6 myShirt = new Shirt(); 7 8 myShirt.displayShirtInformation(); 9 10 } 11 } 12

  6. Calling method與Worker method

  7. 在相同類別中叫用方法 • 範例: 1 public class Elevator { 2 3 public boolean doorOpen=false; 4 public int currentFloor = 1; 5 public int weight = 0; 6 7 public final int CAPACITY = 1000; 8 public final int TOP_FLOOR = 5; 9 public final int BOTTOM_FLOOR = 1; 10 11 public void openDoor() { 12 System.out.println(“Opening door.”); 13 doorOpen = true; 14 System.out.println(“Door is open.”); 15 } 16 17 public void closeDoor() { 18 System.out.println(“Closing door.”);

  8. 19 doorOpen = false; 20 System.out.println(“Door is closed.”); 21 } 22 23 public void goUp() { 24 System.out.println(“Going up one floor.”); 25 currentFloor++; 26 System.out.println(“Floor: “ + currentFloor); 27 } 28 29 public void goDown() { 30 System.out.println(“Going down one floor.”); 31 currentFloor--; 32 System.out.println(“Floor: “ + currentFloor); 33 } 34 35 public void setFloor(int desiredFloor) { 36 while (currentFloor != desiredFloor) 37 if (currentFloor < desiredFloor) { 38 goUp(); 39 } 40 else {

  9. 41 goDown(); 42 } 43 } 44 45 public int getFloor() { 46 return currentFloor; 47 } 48 49 public boolean checkDoorStatus() { 50 return doorOpen; 51 } 52 }

  10. 叫用方法的準則 • 一個calling method可呼叫的方法之數量是沒有限制的。 • calling method與worker method能夠存在於相同的類別或不同的類別中。 • 根據worker method與calling method是否存在於同一類別或不同類別中,你叫用worker method的方式也會有所不同。 • 你能用任何的順序來叫用方法。方法並不需要完全依照它們在類別中出現的順序來宣告(類別內包含worker method)。

  11. 傳遞參數與回傳數值

  12. 宣告含有參數的方法 • 範例: public void setFloor(int desiredFloor) { while (currentFloor != desiredFloor) if (currentFloor < desiredFloor) { goUp(); } else { goDown(); } } • 範例: public void multiply(int NumberOne, int NumberTwo)

  13. main方法 • 範例: public static void main (String args[]) • 範例(叫用): java ShirtTest 12.99 R

  14. 叫用含有引數的方法 • 範例: 1 public class ElevatorTest { 2 3 public static void main(String args[]) { 4 5 Elevator myElevator = new Elevator(); 6 7 myElevator.openDoor(); 8 myElevator.closeDoor(); 9 myElevator.goUp(); 10 myElevator.goUp(); 11 myElevator.goUp(); 12 myElevator.openDoor(); 13 myElevator.closeDoor(); 14 myElevator.goDown(); 15 myElevator.openDoor(); 16 myElevator.closeDoor(); 17 myElevator.goDown();

  15. 18 19 int curFloor = myElevator.getFloor(); 20 21 myElevator.setFloor(myElevator.TOP_FLOOR); 22 } 23 myElevator.openDoor(); 24 } 25 }

  16. 宣告含有回傳值的方法 • 宣告: public int sum(int numberOne, int numberTwo)

  17. 回傳一個數值 • 範例: public int getSum() { return sum; }

  18. 接收回傳值 • 範例: 1 public class ElevatorTest { 2 3 public static void main(String args[]) { 4 5 Elevator myElevator = new Elevator(); 6 7 myElevator.openDoor(); 8 myElevator.closeDoor(); 9 myElevator.goUp(); 10 myElevator.goUp(); 11 myElevator.goUp(); 12 myElevator.openDoor(); 13 myElevator.closeDoor(); 14 myElevator.goDown(); 15 myElevator.openDoor(); 16 myElevator.closeDoor(); 17 myElevator.goDown();

  19. 18 19 int curFloor = myElevator.getFloor(); 20 21 myElevator.setFloor(myElevator.TOP_FLOOR); 22 } 23 myElevator.openDoor(); 24 } 25 }

  20. 使用方法的優點 • 方法使得程式更容易閱讀並且更容易維護。 • 方法讓程式的開發與維護更快速。 • 方法是軟體重複使用的核心。 • 方法允許個別的物件協同運作,並且以分工的方式來完成一個程式。

  21. 練習一:使用引數和回傳值 • 目標 • 步驟 • 討論

  22. 建立靜態方法與變數 • 比較實體方法與變數和靜態方法與變數之間的差異性。 • 宣告靜態方法: static Properties getProperties() • 叫用靜態方法: Classname.method();

  23. 建立靜態方法與變數 • 範例: public static char convertShirtSize(int numericalSize) { if (numericalSize < 10) { return ’S’; } else if (numericalSize < 14) { return ’M’; } else if (numericalSize < 18) { return ’L’; } else { return ’X’;

  24. 建立靜態方法與變數 • 宣告靜態變數: static double SALES_TAX = 8.25; • 存取靜態變數: Classname.variable; • 範例: double myPI; myPI = Math.PI;

  25. 在Java API中的靜態方法和變數 • 範例: • Math類別 • System類別 • StrictMath類別

  26. 在Java API中的靜態方法和變數 • 何時宣告靜態方法或變數: • 不一定要在個別的物件中執行運算,或是變數不一定要與特別的物件有所關聯。 • 方法或變數必須在物件具現化之前被叫用到。 • 方法或變數在邏輯上並不屬於物件,但是可能屬於類別(例如Java API中的Math類別)。

  27. 使用方法覆載(Overloading) • 方法覆載的範例: 1 public class Calculator { 2 3 public int sum(int numberOne, int numberTwo){ 4 5 System.out.println(“Method One”); 6 7 return numberOne + numberTwo; 8 } 9 10 public float sum(float numberOne, float numberTwo) { 11 12 System.out.println(“Method Two”); 13 14 return numberOne + numberTwo; 15 } 16 17 public float sum(int numberOne, float numberTwo) {

  28. 18 19 System.out.println(“Method Three”); 20 21 return numberOne + numberTwo; 22 } 23 }

  29. 使用方法覆載(Overloading) • 方法叫用的範例: 1 public class CalculatorTest { 2 3 public static void main(String [] args) { 4 5 Calculator myCalculator = new Calculator(); 6 7 int totalOne = myCalculator.sum(2,3); 8 System.out.println(totalOne); 9 10 float totalTwo = myCalculator.sum(15.99F, 12.85F); 11 System.out.println(totalTwo); 12 13 float totalThree = myCalculator.sum(2, 12.85F); 14 System.out.println(totalThree); 15 } 16 } 17

  30. 方法覆載(Overloading)與Java API

  31. 方法覆載的使用 • 範例: public int sum(int numberOne, int numberTwo) public int sum(int numberOne, int numberTwo, int numberThree) public int sum(int numberOne, int numberTwo,int numberThree, intnumberFour)

  32. 方法覆載的使用 • 範例: 1 public class ShirtTwo { 2 3 public int shirtID = 0; // 襯衫的預設ID 4 public String description = “-description required-”; // 預設 5 6 // 顏色代碼為 R=紅色,B=藍色,G=綠色,U=未設定 7 public char colorCode = ‘U’; 8 public double price = 0.0; // 所有襯衫的預設價錢 9 public int quantityInStock = 0; // 所有襯衫的預設數量 10 11 public void setShirtInfo(int ID, String d, double p){ 12 shirtID = ID; 13 description = d; 14 price = p; 15 } 16 17 public void setShirtInfo(int ID, String d, double p, char c){

  33. 18 shirtID = ID; 19 description = d; 20 colorCode = c; 21 price = p; 22 } 23 24 public void setShirtInfo(intID,Stringd,doublep,charc,intq){ 25 shirtID = ID; 26 description = d; 27 colorCode = c; 28 price = p; 29 quantityInStock = q; 30 } 31 32 // 此方法顯示項目的值 33 public void display() { 34 35 System.out.println(“Item ID: “ + shirtID); 36 System.out.println(“Item description:” + description); 37 System.out.println(“Color Code: “ + colorCode); 38 System.out.println(“Item price: “ + price); 39 System.out.println(“Quantity in stock: “ + quantityInStock);

  34. 40 41 } // display方法的結尾 42 } // 類別的結尾

  35. 方法覆載的使用 • 範例: 1 class ShirtTwoTest { 2 3 public static void main (String args[]) { 4 ShirtTwo shirtOne = new ShirtTwo(); 5 ShirtTwo shirtTwo = new ShirtTwo(); 6 ShirtTwo shirtThree = new ShirtTwo(); 7 8 shirtOne.setShirtInfo(100, “Button Down”, 12.99); 9 shirtTwo.setShirtInfo(101, “Long Sleeve Oxford”, 27.99, ‘G’); 10 shirtThree.setShirtInfo(102,“ShirtSleeveT-Shirt”,9.99,‘B’,50); 11 12 shirtOne.display(); 13 shirtTwo.display(); 14 shirtThree.display(); 15 } 16 }

  36. 練習二:使用覆載方法 • 目標 • 步驟 • 討論

More Related