360 likes | 571 Views
第八單元. 方法的開發與使用. 單元概論. 單元目標: 描述方法 (method) 的優點以及定義如何定義 worker method 與 calling method 宣告以及叫用方法 比較物件與靜態方法 (static method) 方法的覆載 (overloaded method) 問題與討論. 方法的建立與叫用. 語法: [ modifiers ] return_type method_identifier ([ arguments ]) { method_code_block }. 方法最簡易的形式. 範例:
E N D
第八單元 方法的開發與使用
單元概論 • 單元目標: • 描述方法(method)的優點以及定義如何定義worker method與calling method • 宣告以及叫用方法 • 比較物件與靜態方法(static method) • 方法的覆載(overloaded method) • 問題與討論
方法的建立與叫用 • 語法: [modifiers] return_type method_identifier ([arguments]) { method_code_block }
方法最簡易的形式 • 範例: 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方法的結尾
從不同的類別中叫用方法 • 範例: 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
在相同類別中叫用方法 • 範例: 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.”);
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 {
41 goDown(); 42 } 43 } 44 45 public int getFloor() { 46 return currentFloor; 47 } 48 49 public boolean checkDoorStatus() { 50 return doorOpen; 51 } 52 }
叫用方法的準則 • 一個calling method可呼叫的方法之數量是沒有限制的。 • calling method與worker method能夠存在於相同的類別或不同的類別中。 • 根據worker method與calling method是否存在於同一類別或不同類別中,你叫用worker method的方式也會有所不同。 • 你能用任何的順序來叫用方法。方法並不需要完全依照它們在類別中出現的順序來宣告(類別內包含worker method)。
宣告含有參數的方法 • 範例: public void setFloor(int desiredFloor) { while (currentFloor != desiredFloor) if (currentFloor < desiredFloor) { goUp(); } else { goDown(); } } • 範例: public void multiply(int NumberOne, int NumberTwo)
main方法 • 範例: public static void main (String args[]) • 範例(叫用): java ShirtTest 12.99 R
叫用含有引數的方法 • 範例: 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();
18 19 int curFloor = myElevator.getFloor(); 20 21 myElevator.setFloor(myElevator.TOP_FLOOR); 22 } 23 myElevator.openDoor(); 24 } 25 }
宣告含有回傳值的方法 • 宣告: public int sum(int numberOne, int numberTwo)
回傳一個數值 • 範例: public int getSum() { return sum; }
接收回傳值 • 範例: 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();
18 19 int curFloor = myElevator.getFloor(); 20 21 myElevator.setFloor(myElevator.TOP_FLOOR); 22 } 23 myElevator.openDoor(); 24 } 25 }
使用方法的優點 • 方法使得程式更容易閱讀並且更容易維護。 • 方法讓程式的開發與維護更快速。 • 方法是軟體重複使用的核心。 • 方法允許個別的物件協同運作,並且以分工的方式來完成一個程式。
練習一:使用引數和回傳值 • 目標 • 步驟 • 討論
建立靜態方法與變數 • 比較實體方法與變數和靜態方法與變數之間的差異性。 • 宣告靜態方法: static Properties getProperties() • 叫用靜態方法: Classname.method();
建立靜態方法與變數 • 範例: 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’;
建立靜態方法與變數 • 宣告靜態變數: static double SALES_TAX = 8.25; • 存取靜態變數: Classname.variable; • 範例: double myPI; myPI = Math.PI;
在Java API中的靜態方法和變數 • 範例: • Math類別 • System類別 • StrictMath類別
在Java API中的靜態方法和變數 • 何時宣告靜態方法或變數: • 不一定要在個別的物件中執行運算,或是變數不一定要與特別的物件有所關聯。 • 方法或變數必須在物件具現化之前被叫用到。 • 方法或變數在邏輯上並不屬於物件,但是可能屬於類別(例如Java API中的Math類別)。
使用方法覆載(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) {
18 19 System.out.println(“Method Three”); 20 21 return numberOne + numberTwo; 22 } 23 }
使用方法覆載(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
方法覆載的使用 • 範例: 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)
方法覆載的使用 • 範例: 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){
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);
40 41 } // display方法的結尾 42 } // 類別的結尾
方法覆載的使用 • 範例: 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 }
練習二:使用覆載方法 • 目標 • 步驟 • 討論