Jun Wu的教學網頁國立屏東大學資訊工程學系CSIE, NPTU
文章推薦指數: 80 %
類別定義
跳至內容
JunWu的教學網頁國立屏東大學資訊工程學系CSIE,NPTU
使用者工具
登入
網站工具
搜尋
工具輸出PDF檔案多媒體管理器網站地圖登入>
多媒體管理器網站地圖
足跡:•classdefinition
java:classdefinition
目錄表
12.ClassDefinitionsandObjectInstantiation
12.1類別定義
12.2物件的實體化ObjectInstantiation
12.3建構函式/建構子
國立屏東大學資訊工程學系物件導向程式設計
12.ClassDefinitionsandObjectInstantiation
類別定義
物件實體化
建構函式/建構子
12.1類別定義
類別的定義必須包含類別名稱、屬性與行為,使用Java語言的術語,屬性被稱為field,行為被稱為method。
在Java語言中,類別定義語法如下:
classclassName
{
//fielddeclarations
[DataTypevariableName[=value]?[,variableName[=value]?]*;]*
//methoddeclarations
[returnTypemethodName(parameters)
{
//methodimplementations
statements
}]*
}
我們以一個簡單的例子示範類別的定義:
classPerson
{
//fielddeclarations
Stringfirstname;
Stringlastname;
//methoddeclarations
voidshowInfo()
{
System.out.println("Name:"+firstname+""+lastname);
}
}
上面這個程式必須命名為Person.java。
12.2物件的實體化ObjectInstantiation
下面則是使用類別來產生物件實體的例子:
classtest
{
//建構一個物件導向世界,產生一個Person類別的物件
publicstaticvoidmain(String[]args)
{
Personamy;//amy是一個reference,應該要指向Person類別的物件實體
amy=newPerson();//產生實體,並將實體所在的位置儲存在amy
amy.showInfo();//透過amy這個reference,要求其執行showInfo()method
}
}
執行結果:
Name:nullnull
因為沒有設定這個Person類別的物件的firstname與lastname,所以再修改如下:
classtest
{
//建構一個物件導向世界,產生一個Person類別的物件
publicstaticvoidmain(String[]args)
{
Personamy=newPerson();//amy是一個reference,指向Person類別的物件實體
amy.firstname="Amy";//透過amy這個reference存取其firstnamefield
amy.lastname="Wang";//透過amy這個reference存取其lastnamefield
amy.showInfo();
}
}
執行結果:
Name:AmyWang
其實我們應該再增加一些field到Person類別,例如phonenumber,address,email等,讓它更完整,不過為了保持範例的簡單性,所以暫時不這樣做。
12.3建構函式/建構子
有沒有注意到這行「Personamy=newPerson();」,其中的newPerson()即為用來產生一個Person類別的實體。
其實還不只是這樣,它還會幫你呼叫一個名為Person()的method。
可是我沒有定義這個method啊
Java語言預設會幫你在類別定義內產生一個與類別同名的method,稱為建構子(constructor)
例如Person類別會自動包含以下的程式碼
Person(){}
它是一個特殊的method,沒有傳回型態的宣告,且其內容為空白
在使用newPerson()時,這個method會被自動呼叫
內容空白,那不就沒用處?
看你想要做什麼?你可以自己定義啊!例如:
Person()
{
firstname="undefined";
lastname="undefined";
}
你還可以提供不同版本的constructor,例如:
Person(Stringf,Stringl)
{
firstname=f;
lastname=l;
}
這樣一來,你可以在實體化的同時順便把firstname與lastname設定好。
例如以下的宣告:
Personamy=newPerson("Amy","Wang");
不過要特別注意,如果定義了自己的constructor,那麼預設的constructor就不會再產生,所以下面的程式碼是錯誤的:
classPerson
{
//fielddeclarations
Stringfirstname;
Stringlastname;
//constructors
Person(Stringf,Stringl)
{
firstname=f;
lastname=l;
}
//methoddeclarations
voidshowInfo()
{
System.out.println("Name:"+firstname+""+lastname);
}
}
classtest
{
//建構一個物件導向世界,產生一個Person類別的物件
publicstaticvoidmain(String[]args)
{
Personamy=newPerson();//已定義Person(String,String)constructor,預設的Person()就不存在
amy.firstname="Amy";
amy.lastname="Wang";
amy.showInfo();
}
}
瞭解了!所以如果有自定constructor就要小心實體化時呼叫的版本是否正確!
您也可多提供一個預設的版本!例如:
Person()
{
firstname="unknown";
lastname="unkonwn";
}
我還有一個問題!Java是不是和C++一樣有constructor與destructor,那Java的destructor該怎麼寫?
Java採用記憶體自動管理機制garbagecollection,它會自己監看是否有不再使用的物件,它自己會回收!所以沒有destructor!
我們將類別定義語法加上constructor的定義:
classclassName
{
//fielddeclarations
[DataTypevariableName[=value]?[,variableName[=value]?]*;]*
//constructors
[className(parameters)
{
}]*
//methoddeclarations
[returnTypemethodName(parameters)
{
//methodimplementations
statements
}]*
}
java/classdefinition.txt·上一次變更:2019/07/0215:01(外部編輯)
頁面工具
輸出PDF檔案回到頁頂
延伸文章資訊
- 1【從零開始學Java 程式設計】類別 - HKT 線上教室
【從零開始學Java 程式設計】 線上教學課程目錄,使用Java 程式語言,開發應用程式。 ... 而物件(Object),是從類別(class) 實體化後而來的。
- 2Java 入門指南- 物件的模板,類別
介紹如何定義Java 的類別。 ... 《程式語言教學誌》的範例程式http://pydoing.blogspot.com/ 檔名:Demo2.java 功能:示範Java 程式作者:張凱慶時間...
- 3Jun Wu的教學網頁國立屏東大學資訊工程學系CSIE, NPTU
類別定義
- 4我要學會Java (二):物件導向其實很簡單 - Noob's Space
我要學會Java (二):物件導向其實很簡單. 物件導向的三大特型:封裝、繼承、多型。 不過或許我們應該先來講類別和物件的關係。
- 5Java Tutorial 第二堂(3)方法、類別與套件
直接從類別定義出發,再定義靜態方法(Static method),對一些簡單需求來說,確實是不必要,不過就程式的組織與架構上,Java 的作法與一些語言並沒有差別,只不過要求你 ...