java 核心技術(shù)-12版 卷Ⅰ- 4.4.1 靜態(tài)字段
原文
4.4 靜態(tài)字段與實(shí)例字段
在前面給出的示例程序中,main方法都標(biāo)記了 static 修飾符。下面來(lái)討論這個(gè)靜態(tài)修飾符的含義。
4.4.1 靜態(tài)字段
如果將一個(gè)字段定義為static ,那么這個(gè)字段并不出現(xiàn)在每個(gè)類的對(duì)象中。每個(gè)靜態(tài)字段只有一個(gè)副本??梢哉J(rèn)為靜態(tài)字段屬于類,而不屬于單個(gè)對(duì)象。例如,假設(shè)需要為每一個(gè)員工分配唯一的標(biāo)識(shí)碼 id,這里為Employee 類添加一個(gè)實(shí)例字段 id和 一個(gè)靜態(tài)字段 nextId :
現(xiàn)在,每一個(gè)Employee 對(duì)象都有自己的id字段,但這個(gè)類的所有實(shí)例將共享一個(gè)nextId 字段。換句話說(shuō),如果有1000個(gè) Employee 類對(duì)象,則有1000個(gè)實(shí)例字段id,每一個(gè)對(duì)象有一個(gè)實(shí)例字段id。但是,只有一個(gè)靜態(tài)字段 nextId 。 即使沒有Employee 對(duì)象,靜態(tài)字段 nextId 也存在。它屬于類,而不屬于任何單個(gè)對(duì)象。
注釋:在一些面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言中,靜態(tài)字段被稱為類字段。術(shù)語(yǔ)“靜態(tài)”只是沿用了C++ 的叫法并無(wú)實(shí)際意義。
在構(gòu)造器中,我們?yōu)樾翬mployee 對(duì)象分配下一個(gè)可用的id ,然后將其自增1:
id = nextId;
nextId ++;
假設(shè)我們構(gòu)造了對(duì)象 harry 。harry的id 字段設(shè)置為靜態(tài)字段nextId的當(dāng)前值,并將靜態(tài)字段nextId 加1:
harry.id = Employee.nextId;
Employee.nextId ++;
個(gè)人補(bǔ)充
可以這么理解,class 的概念就像一個(gè)模板一樣,規(guī)定這個(gè)類里面有 id name 這些屬性。
而每一個(gè)實(shí)例(e1,e2 ,e3) 則分別處理其自身的id 是幾,name是什么。

就像我們要填寫一個(gè)表單
id : _____
name:______
而下面的static 字段則像是表單的公共部分,大家都是一模一樣的,要填寫的部分就是實(shí)例所管轄的范圍。公共一樣的部分就是class 的范疇