1 / 22

Ch02 方法

Ch02 方法. 物件導向程式設計 (2). 方法 (1). 定義   <修飾字> 資料型別 方法名稱 ( <形式參數列> )   {   // 方法中的敘述 <return 回傳值;>   } 修飾字 、 形式參數列 和 return 敘述 為非必要。 資料型別 和 方法名稱 為必要。 方法的資料型別 必須和 回傳值 相同。. 方法 (2). 方法的命名規則 一般方法名稱的前面部份會是一個動詞,動詞應全為小寫。 動詞後的字,第一個字母為大寫 若方法是為了設定或取得 private 屬性,則分別使用「 set 屬性名稱」和「 get 屬性名稱」。.

kanan
Download Presentation

Ch02 方法

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. Ch02 方法 物件導向程式設計(2)

  2. 方法(1) • 定義   <修飾字>資料型別方法名稱(<形式參數列>)   {   // 方法中的敘述 <return 回傳值;>   } • 修飾字、形式參數列和return敘述為非必要。 • 資料型別和方法名稱為必要。 • 方法的資料型別必須和回傳值相同。

  3. 方法(2) • 方法的命名規則 • 一般方法名稱的前面部份會是一個動詞,動詞應全為小寫。 • 動詞後的字,第一個字母為大寫 • 若方法是為了設定或取得private屬性,則分別使用「set屬性名稱」和「get屬性名稱」。

  4. 方法(3) • 呼叫方法的語法 物件名稱.方法名稱(<參數列>) • 參數列的工作是把參數傳給方法。 • 參數列為選擇性的功能,視方法定義的形式參數列而定。

  5. 範例1 • class Ch03_01 • { public static void main(String [] args) • { Date today = new Date(); • today.set_day(21); • today.set_month(3); • today.set_year(2007); • System.out.println("今天的日期是: " + today.get_year() + "-" + today.get_month() + "-" + today.get_day()); • } • } • class Date • { private int day; • private int month; • private int year; • void set_day(int a) • { day = a; } • void set_month(int a) • { month = a; } • void set_year(int a) • { year = a; } • int get_day() • { return day; } • int get_month() • { return month; } • int get_year() • { return year; } • } 資訊隱藏 想想,private使用的好時機 如果,你不想讓一些資料隨便被人更改,或是一些固定值,或是你的生日不變

  6. 方法(4) • 形式參數式中,以逗號分隔各個形式參數 public int getArea(int w, int h) { return w*h; } • static修飾方法時,該方法為類別方法 • 抽象方法沒有實作,無方法主體 abstract <修飾字> 資料型別 方法名稱(<形式參數列>);

  7. 方法的呼叫(1) • 呼叫方法時的程式走向

  8. 方法的呼叫(2) • 參數只傳遞數值

  9. 方法的呼叫(3) • 傳值和傳參照 • 基本型別(boolean、byte、short、int、long、char、float及double)是以傳值的方式回傳。 • 自訂型別(陣列或物件)是以傳參照的方式回傳資料。

  10. 方法的型別與回傳值 • 方法的型別就是回傳值的型別 修飾字資料型別方法名稱(形式參數列) { // 方法中的敘述 return 回傳值; } • 使用void宣告的方法,返回時不回傳任何值 return;

  11. Today和birthday兩個物件實體是不是同一個? 範例2 • class Ch03_02 • { • public static void main(String [] args) • { • Date2 today = new Date2(); • Date2 birthday = new Date2(); • birthday = today; • today.set_day(21); • today.set_month(3); • today.set_year(2007); • System.out.println("今天的日期是: " + today.get_year() + "-" + today.get_month() + "-" + today.get_day()); • System.out.println("today: " + today); • System.out.println("birthday: " + birthday); • System.out.println("生日是: " + birthday.get_year() + "-" + birthday.get_month() + "-" +birthday.get_day()); • } • }

  12. 範例2_1訂做另一個真正的today(法一) • class Ch03_02_01 • { • public static void main(String [] args) • { • Date3 today = new Date3(); • Date3 birthday = new Date3(); • today.set_day(21); • today.set_month(3); • today.set_year(2007); • birthday.set_day(today.get_day()); • birthday.set_month(today.get_month()); • birthday.set_year(today.get_year()); • System.out.println("今天的日期是: " + today.get_year() + "-" + today.get_month() + "-" + today.get_day()); • System.out.println("today: " + today); • System.out.println("birthday: " + birthday); • System.out.println("生日是: " + birthday.get_year() + "-" + birthday.get_month() + "-" +birthday.get_day()); • } • }

  13. 範例2_2訂做另一個真正的today(法二)—傳參照 • class Ch03_02_02 • { • public static void main(String [] args) • { • Date4 today = new Date4(); • Date4 birthday; • today.set_day(21); • today.set_month(3); • today.set_year(2007); • birthday = duplicateObj(today); • System.out.println("今天的日期是: " + today.get_year() + "-" + today.get_month() + "-" + today.get_day()); • System.out.println("today: " + today); • System.out.println("birthday: " + birthday); • System.out.println("生日是: " + birthday.get_year() + "-" + birthday.get_month() + "-" +birthday.get_day()); • } • static Date4 duplicateObj(Date4 ori) • { • Date4 b = new Date4(); • b.set_day(ori.get_day()); • b.set_month(ori.get_month()); • b.set_year(ori.get_year()); • System.out.println("ori : " + ori); • System.out.println("b : " +b); • return b; • } • }

  14. 活化手、腦練習(1) • 建立一個類別,類別內有一個sort方法,它可以將傳入的一個陣列,排序後(由小到大)傳回給另一個陣列

  15. 變數領域(1) • 大括弧是變數領域的藩籬 • 若一個變數於某個區塊內宣告,則區塊內從宣告點以下為變數的領域。 • 區塊外不為變數的領域。 { int j=1; } j++; //錯誤,無法識別變數j

  16. 變數領域(2)

  17. 變數領域(3) • 屬性也稱為欄位變數。 • 方法內的變數稱為自動變數或區域變數。 • 自動變數和欄位變數同名是合法的情況,不過兩者若同名,則欄位變數會因為被遮蔽而無法在方法內被「看到」。 • 欲在方法內看到同名的屬性時,可以使用this關鍵字,指出使用的是物件本身的屬性。 this.屬性名稱

  18. 變數領域(4)

  19. 範例3 • class Ch03_03 • { • int a = 10; • public static void main(String [] args) • { • Ch03_03 objA = new Ch03_03(); • System.out.println("objA.a = " + objA.a); • objA.myMethod(1); • } • void myMethod( int a) • { • System.out.println("myMethod內的a : " + a); • a = this.a; • System.out.println("重設a,後myMethod內的a : " + a); • System.out.println("myMethod內的this.a : " + this.a); • } • }

  20. 方法多載 • 同一類別中,若定義數個相同名稱的方法,而各方法所需的參數不同時,稱為方法多載(Overloading)。 • 多載方法是以傳入的參數個數及參數型別做為呼叫的判斷依據。 • 多載方法的形式參數的個數及型別相同時,為非法定義。 • 多載的目的是因應不同的傳遞資料,讓方法更有彈性。

  21. 範例4 • class Ch03_04 • { • public static void main(String [] args) • { • 圓形 大餅 = new 圓形(); • 矩形 阿方 = new 矩形(); • System.out.println("圓形的面積是 : " + 求面積(大餅)); • System.out.println("矩形的面積是 : " + 求面積(阿方)); • } • static double 求面積(圓形 圓) • { • return (圓.圓周率 * 圓.半徑 * 圓.半徑); • } • static double 求面積(矩形 矩) • { • return (矩.長度 * 矩.length); • } • } • class 圓形 • { • final double 圓周率 = 3.14; • double 半徑 = 2; • } • class 矩形 • { • double 長度 = 2; • double length = 1; • }

  22. 活化手腦練習(2) • 建立多載方法myAdd,依照傳入的不同資料型別的資料作加的動作。 • 資料型別包括:int, float, double, String

More Related