Java 入門指南- 單元8 - 類別 - 程式語言教學誌

文章推薦指數: 80 %
投票人數:10人

檔名:ClassDemo01.java * 作者:張凱慶* 網站:http://kaiching.org */ package classdemo01; // 宣告類別名稱 public class ClassDemo01 { // 這裡定義屬性 int a; ... Java入門指南 單元8-類別 ~~學習進度表~~ Java中一個類別(class)就是一個程式檔案,類別名稱要跟檔案名稱相同。

典型的類別定義,如下圖 publicclassDemoType{     field_typefield;          publicreturn_typemethod(parameter_list){         ...     } } 整體結構就是宣告類別,類別名稱之後用一對大括弧把定義圍起來,裡頭可以定義屬性(field)與方法(method),屬性就是專屬於類別的變數(variable),方法則是類別進行工作的地方。

如果這個類別還需要是可執行的,就得額外定義特別的main()方法。

我們將上面的定義例子寫成完整的範例程式,如下 /* *檔名:ClassDemo01.java *作者:張凱慶 *網站:http://kaiching.org */ packageclassdemo01; // 宣告類別名稱 public class ClassDemo01 { // 這裡定義屬性 int a; // 這裡定義方法 public int doSomething(int p1) { return a + p1; } // 這裡定義 main() 方法 public static void main(String[] args) { ClassDemo01 d = new ClassDemo01(); d.a = 11; System.out.println(); System.out.println(d.doSomething(5)); System.out.println(); } } 記不記得之前完整範例中都有main(),先來執行這個範例程式,看看執行出什麼結果囉 16 程式的執行在main()方法的定義地方 // 這裡定義 main() 方法 public static void main(String[] args) { ClassDemo01 d = new ClassDemo01(); d.a = 11; System.out.println(); System.out.println(d.doSomething(5)); System.out.println(); } 我們在main()中宣告並建立相同ClassDemo01型態的物件d,為什麼可以這樣做呢?為什麼可以在main()中建立相同類別的物件(object)?答案很簡單,這是因為static的關係。

由於屬性及方法合稱成員(member),類別中的成員有兩種,一種用static修飾,static成員屬於類別,另一種沒有用static修飾,這一類成員屬於物件實體(instance)。

如ClassDemo01中,a為實體屬性(instancefield),doSomething()是實體方法(instancemethod),而main()則是類別方法(classmethod)。

實體成員與類別成員兩者最大的不同就是互相不能直接存取對方,如果要在main()中使用a,那就得在main()裡建立ClassDemo01型態的物件實體。

此例在main()中建立ClassDemo01的實體變數d,然後將d的屬性a設置為11 ClassDemo01 d = new ClassDemo01(); d.a = 11; 然後呼叫doSomething()方法 System.out.println(d.doSomething(5)); 接著我們往上找實體屬性a的宣告 // 這裡定義屬性 int a; 通常屬性的宣告會放在class關鍵字(keyword)的下一行,數量依需求而定。

定義doSomething()的部分 // 這裡定義方法 public int doSomething(int p1) { return a + p1; } 此例的doSomething()需要一個int參數(parameter)p1,結果回傳一個int整數。

小括弧裡頭放參數,稱之為參數列(parameterlist),因為參數的數量也可依需求而定。

Java允許方法可以有不同的參數列版本,這稱之為多載(overload),我們將ClassDemo01的doSomething()改成多載版本,如下 /* *檔名:ClassDemo02.java *作者:張凱慶 *網站:http://kaiching.org */ packageclassdemo02; public class ClassDemo02 { int a; // 這裡定義 doSomething() 的第一個版本 public int doSomething(int p1) { return a + p1; } // 這裡定義 doSomething() 的第二個版本 public double doSomething(double p1) { return a + p1; } public static void main(String[] args) { ClassDemo02 d = new ClassDemo02(); d.a = 11; System.out.println(); System.out.println(d.doSomething(5)); System.out.println(d.doSomething(7.2)); System.out.println(); } } ClassDemo02的doSomething()有兩個版本 // 這裡定義 doSomething() 的第一個版本 public int doSomething(int p1) { return a + p1; } // 這裡定義 doSomething() 的第二個版本 public double doSomething(double p1) { return a + p1; } 第一個doSomething()用了int的參數p1,第二個doSomething()的參數型態則是double,兩者構成不同的多載版本。

回傳值型態(returntype)並不影響多載的版本差異,只有參數列不同才構成多載,至於參數列指參數的型態、數量、排列順序等。

如果運算式中的兩個數值(value)都是基本資料型態(primitivedatatype),編譯器(compiler)會自動替其中一個數值先進行型態轉換,如上面第二個doSomething()的a+p1的a會先轉換成double,然後才與p1相加。

此例很簡單,兩個參數列都只有一個參數,差異僅在型態不同而已。

執行結果如下 16 18.2 接下來,我們開始介紹物件導向程式設計(object-orientedprogramming)的特性           封裝(encapsulation)。

相關教學影片 第五堂課類別與物件導向程式設計:類別⇨YouTube頁面連結 上一頁單元7-迴圈 回Java入門指南首頁 下一頁單元9-封裝與建構子 回Java教材首頁 回程式語言教材首頁 中英文術語對照 class類別 classmethod類別方法 compiler編譯器 encapsulation封裝 field屬性 instance實體 instancefield實體屬性 instancemethod實體方法 keyword關鍵字 member成員 method方法 object物件 object-orientedprogramming物件導向程式設計 overload多載 parameter參數 parameterlist參數列 primitivedatatype基本資料型態 returntype回傳值型態 value數值 variable變數 參考資料 1.TheJava™Tutorials:WhatIsanObject? 2.TheJava™Tutorials:WhatIsaClass? 3.TheJava™Tutorials:Lesson:ClassesandObjects 4.TheJava™Tutorials:Classes 5.TheJava™Tutorials:DeclaringClasses 6.TheJava™Tutorials:DeclaringMemberVariables 7.TheJava™Tutorials:DefiningMethods 8.TheJava™Tutorials:Objects 9.TheJava™Tutorials:CreatingObjects 10.TheJava™Tutorials:UsingObjects 重點整理 1.Java中一個類別就是一個程式檔案,類別名稱要跟檔案名稱相同。

2.類別定義包括宣告屬性與定義方法,屬性是類別中共通的變數,方法進行工作。

3.關鍵字static宣告的成員屬於類別,其他非static定義的內容屬於物件實體。

4.多載是指方法可以有不同的參數列版本。

問題與討論 1.為什麼類別要有欄位跟方法?想一想,這跟物件的意涵有什麼關聯? 2.為什麼方法有參數列?回傳值的目的是什麼? 3.什麼是多載?為什麼方法允許有不同的參數列版本? 4.為什麼要有關鍵字static?類別與實體有有何不同? 練習 1.建立一個專案Exercise0801,裡頭設計一個int的屬性result,另有一個沒有回傳值的方法add(),add()有一個int參數,呼叫add()時會把參數與result相加,結果儲存在result,執行部分先將result設定為25,再呼叫add()以24當參數。

2.承上題,另建立一個專案Exercise0802,改成由使用者輸入兩個整數。

3.承上題,另建立一個專案Exercise0803,加入方法subtract(),subtract()沒有回傳值,另外需要一個int參數,同樣呼叫subtract()是將value減去參數值,最後結果儲存在result。

4.承上題,另建立一個專案Exercise0804,繼續擴充Exercise0803,加入乘法的方法。

5.承上題,另建立一個專案Exercise0805,繼續擴充Exercise0804,加入除法的方法。

6.建立一個專案Exercise0806,仿照Exercise0709,將方法改成計算階層值,結果儲存在result。

7.寫一個程式Exercise0807,仿照Exercise0711,將方法改成計算費氏數列,結果儲存在result。



請為這篇文章評分?