Java 入門指南- 單元8 - 類別 - 程式語言教學誌
文章推薦指數: 80 %
檔名: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。
延伸文章資訊
- 1我要學會Java (二):物件導向其實很簡單 - Noob's Space
類別方法撰寫的方式和一般的方法基本上一樣,只是呼叫的時候,不需要建立物件就可以呼叫了。 把上面的範例加上建構子和類別方法大概是這樣: class ...
- 2定義類別(Class) | Java SE 6 技術手冊 - caterpillar
在Java 中使用"class" 關鍵字來定義類別,使用類別來定義一個物件(Object)時,會考慮這個物件可能擁有的「屬性」(Property)與「方法」(Method)。
- 3Java :: 定義類別
如何使用Java 告訴電腦衣服的設計圖呢?你會先在程式中定義類別,這相當於上圖中衣服的設計圖:. class Clothes { String color; char size; }.
- 4類別函數 - Java 學習系列
類別變數:物件共享,佔用在同一個記憶體. 類別函數:可以直接呼叫. 類別函數的定義方式也是相同的:. 加上static 就可以定義為類別函數.
- 5Java 入門指南- 單元8 - 類別 - 程式語言教學誌
檔名:ClassDemo01.java * 作者:張凱慶* 網站:http://kaiching.org */ package classdemo01; // 宣告類別名稱 public cla...