Java :: 定義類別
文章推薦指數: 80 %
如何使用Java 告訴電腦衣服的設計圖呢?你會先在程式中定義類別,這相當於上圖中衣服的設計圖:. class Clothes { String color; char size; }.
OPENHOME.CC
Java
|Java平台概論
Java版本遷移
JDK規範與實作
JVM、JRE與JDK
|路徑/套件/模組
Hello,Java
JDK/JRE/類別版本
類別/原始碼路徑
package與import
初探模組
|語法基礎
型態
變數
運算子
型態轉換
if/else、switch
for、while迴圈
|類別與物件
定義類別
使用Scanner、BigDecimal
基本型態包裹器
陣列
字串
Java與Unicode
|封裝
流程與資料的封裝
public/建構式/重載
this與static
不定長度引數/內部類別
資料載體與record
|繼承
共同行為與isa
重新定義/abstract
protected/super
final/Object/instanceof
sealed類別
|介面
定義行為外觀
解決需求變化
介面語法細節
使用enum列舉
sealed介面
|例外
try/catch例外處理
要抓還是要拋?
堆疊追蹤與assert
finally資源關閉
|泛型
定義與使用泛型
Producerextends
Consumersuper
|Lambda
初試Lambda
Lambda運算式與函式介面
this與final
方法與建構式參考
GitHub
Twitter
Facebook
LinkedIn
2DDesigns
3DDesigns
Tags
BuiltwithbyHugo
HOME>
Java>
類別與物件>
定義類別
使用class
建構式
初試record類別
objectoriented
encapsulation
datacarrier
this
typesystem
定義類別
May23,2022
來看看如何為衣服建模?你會有個衣服的設計圖,上頭定義了衣服的款式與顏色、尺寸,你會根據設計圖製作出實際的衣服,每件衣服都是同一款式,但會擁有自己的顏色與尺寸,你會為每個衣服別上一個名牌,這個名牌只能別在同款式的衣服上。
使用class
如何使用Java告訴電腦衣服的設計圖呢?你會先在程式中定義類別,這相當於上圖中衣服的設計圖:
classClothes{
Stringcolor;
charsize;
}
類別定義時使用class關鍵字,名稱使用Clothes,相當為衣服設計圖取名為Clothes,衣服的顏色用字串表示,也就是color變數,可儲存"red"、"black"、"blue"等值,衣服的尺寸會是'S'、'M'、'L',所以用char型態宣告變數。
如果要在程式中,利用Clothes類別作為設計圖,建立衣服實例,要使用new關鍵字。
例如:
newClothes();
在物件術語中,這叫作新建一個物件。
如果要有個名牌,專門綁到這個物件上,可以如下宣告:
Clothesc1;
在Java的術語中,這叫宣告參考名稱(Referencename)、參考變數(Referencevariable)。
如果要將c1綁到新建的物件上,可以使用=指定,以Java的術語來說,稱為將c1名稱參考(refer)至新建物件。
例如:
Clothesc1=newClothes();
可以將程式語法如下圖表示,直接對照上圖,你就可以瞭解類別與物件的區別,以及class、new、=等語法的使用:
若編譯器能從前後文推斷出區域變數型態,可以使用var宣告變數:
varclothes=newClothes();
在Clothes類別中,定義了color與size兩個變數,以Java術語來說,叫作定義兩個值域(Field)成員,或叫作定義兩個物件資料成員,這表示每個新建的Clothes實例,可以擁有個別color與size值。
例如:
packagecc.openhome;
classClothes{
Stringcolor;
charsize;
}
publicclassField{
publicstaticvoidmain(String[]args){
varsun=newClothes();
varspring=newClothes();
sun.color="red";
sun.size='S';
spring.color="green";
spring.size='M';
System.out.printf("sun(%s,%c)%n",sun.color,sun.size);
System.out.printf("spring(%s,%c)%n",spring.color,spring.size);
}
}
這邊定義了兩個類別,一個是公開(public)的Field類別,所以檔案主檔名必須是Field,另一個是非公開的Clothes,一個原始碼中可以有多個類別定義,但只能有一個是公開類別,且檔案主檔名必須與公開類別名稱相同。
程式中建立了兩個Clothes實例,並分別宣告了sun與spring兩個名稱來參考,接著要求JVM,將sun綁定物件上的color與size分別指定為"red"與'S',將spring的color與size分別指定為"green"與'M'。
最後分別顯示sun、spring的資料成員值。
執行結果如下,可以看到sun、spring各自擁有自己的資料成員:
sun(red,S)
spring(green,M)
建構式
可以觀察這個範例中,為個別物件指定資料成員值的程式碼,你會發現是類似的,如果想在建立物件時,一併進行某個初始流程,像是指定資料成員值,可以定義建構式(Constructor),建構式是與類別名稱同名的方法(Method):
packagecc.openhome;
classClothes2{
Stringcolor;
charsize;
Clothes2(Stringcolor,charsize){
this.color=color;
this.size=size;
}
}
publicclassField2{
publicstaticvoidmain(String[]args){
varsun=newClothes2("red",'S');
varspring=newClothes2("green",'M');
System.out.printf("sun(%s,%c)%n",sun.color,sun.size);
System.out.printf("spring(%s,%c)%n",spring.color,spring.size);
}
}
在這個例子中,定義新建物件時,必須傳入兩個引數給字串型態的color參數(Parameter)與char型態的size參數,而建構式中,由於color參數與資料成員color同名,你不可以直接寫color=color,這是將color參數的值指定給color參數,而要使用this表示,將color參數的值指定給這個物件的color成員。
在實際使用new建構物件時,就可以直接傳入字串與字元,分別代表Clothes實例的color與size值,執行結果與上個範例是相同的。
初試record類別
這邊只不過是定義類別,就物件導向的封裝(Encapsulation)而言,只是單純地將顏色與尺寸的資料組合衣服的資料,就這個簡單的需求而言,Java16以後,可以使用record類別來定義:
packagecc.openhome;
recordClothes3(Stringcolor,charsize){}
publicclassField3{
publicstaticvoidmain(String[]args){
varsun=newClothes3("red",'S');
varspring=newClothes3("green",'M');
System.out.printf("sun(%s,%c)%n",sun.color(),sun.size());
System.out.printf("spring(%s,%c)%n",spring.color(),spring.size());
}
}
在定義record類別時,不需要加上class關鍵字,類別名稱取接著就是定義record類別的預設建構式,對於以上定義的衣服類別,在語義上是在告訴其他開發者(或未來閱讀程式碼的自己),這裡定義了衣服,用來記錄衣服的資料,資料是以color與size的順序構成,學生實例建立時指定的資料,就是實例唯一的狀態,除此之外沒有別的意涵了。
也就是說,定義record類別時指定的欄位名稱、順序,用來組成了資料的結構,編譯器預設會為指定的欄位名稱生成值域,以及同名的方法,就上例來說,就是會生成name()與number()方法,傳回對應的值域。
record類別的值域無法變動,這是為了限制你,定義資料載體(datacarrier)才使用record類別,就目前來說可以知道的是,單純地將顏色與尺寸的資料組合衣服的資料,就是將衣服作為資料載體的概念。
延伸文章資訊
- 1Java :: 定義類別
如何使用Java 告訴電腦衣服的設計圖呢?你會先在程式中定義類別,這相當於上圖中衣服的設計圖:. class Clothes { String color; char size; }.
- 2Inner Class)、自訂資料型態@ Penguin 工作室,一起JAVA吧!
事實上我們撰寫的JAVA程式都是包含在一個類別(Class)裡面的,像是先前我們所建立的public class HelloWorld { }就是一個類別,在類別中我們可以宣告變數、方法等, ...
- 3我要學會Java (二):物件導向其實很簡單 - Noob's Space
類別方法撰寫的方式和一般的方法基本上一樣,只是呼叫的時候,不需要建立物件就可以呼叫了。 把上面的範例加上建構子和類別方法大概是這樣: class ...
- 4定義類別(Class) | Java SE 6 技術手冊 - caterpillar
在Java 中使用"class" 關鍵字來定義類別,使用類別來定義一個物件(Object)時,會考慮這個物件可能擁有的「屬性」(Property)與「方法」(Method)。
- 5類別(Class)-基礎- Java學習筆記
類別(Class)可說是建立物件的一個藍圖,是一個使用者自行定義的資料型態。 ... 由以上範例可知class有如一個分類,該分類定義了各種特徵、行為、運作方式, 藉由表示某物是 ...