static
關(guān)鍵字
一個(gè)類可以創(chuàng)建n個(gè)對(duì)象赡勘,如果n個(gè)對(duì)象中的某些數(shù)據(jù)需要n個(gè)對(duì)象共用策吠,就需要使用static關(guān)鍵字修飾這些數(shù)據(jù)。
Java中孵班,一般情況下調(diào)用類的成員都需要先創(chuàng)建類的對(duì)象赠潦,然后通過類的對(duì)象進(jìn)行調(diào)用叫胖。使用static關(guān)鍵字可以實(shí)現(xiàn)通過類名加"."直接調(diào)用類的成員,不需要?jiǎng)?chuàng)建類的對(duì)象她奥,但是類的對(duì)象也是可以調(diào)用的瓮增。
修飾屬性
使用static修飾的屬性稱為靜態(tài)屬性或類變量怎棱,沒有使用static修飾的屬性稱為實(shí)例變量。使用static修飾的屬性屬于類绷跑,不屬于具體的某個(gè)對(duì)象拳恋。類屬性在類名首次出現(xiàn)時(shí)初始化,即使沒有創(chuàng)建對(duì)象砸捏,類屬性也是存在的谬运。
作用
在同一個(gè)類的對(duì)象中共享數(shù)據(jù)。
instance
static與instance的區(qū)別
static:靜態(tài)(屬于類垦藏,只有一份)
instance:實(shí)例(實(shí)例也叫對(duì)象梆暖,就是new出來(lái)的堆的內(nèi)存空間,實(shí)例是每個(gè)對(duì)象專有的掂骏,每new一次就分配一次內(nèi)存)
(1)實(shí)例變量是在new類時(shí)在堆中分配內(nèi)存的轰驳。
(2)構(gòu)造函數(shù)可以為實(shí)例屬性初始化。構(gòu)造函數(shù)不會(huì)為靜態(tài)屬性初始化芭挽。
(3)由于靜態(tài)屬性是所有對(duì)象共有的滑废,所有對(duì)象不就是類嗎,因此靜態(tài)屬性也稱為類屬性袜爪,或者類變量,或者類成員薛闪。
(4)既然靜態(tài)屬性屬于類辛馆,不屬于某個(gè)具體的對(duì)象,因此在new對(duì)象時(shí)豁延,不會(huì)給靜態(tài)屬性分配內(nèi)存昙篙。那靜態(tài)時(shí)什么時(shí)候分配內(nèi)存呢?
(5)當(dāng)在程序運(yùn)行期間诱咏,首次出現(xiàn)類名時(shí)苔可,會(huì)暫時(shí)停止程序運(yùn)行,去為類的靜態(tài)屬性分配內(nèi)存袋狞,然后繼續(xù)運(yùn)行焚辅。
(6)靜態(tài)變量被分配在方法區(qū)中,常駐內(nèi)存苟鸯,永不回收同蜻。靜態(tài)變量只有一份。相當(dāng)于c語(yǔ)言的全局變量早处。
(7)靜態(tài)變量由類名操作湾蔓,由類名賦值,取值砌梆。
(8)類名調(diào)用靜態(tài)屬性時(shí)默责,可以省略類名贬循。
(9)static的加載,首次出現(xiàn)類名時(shí),為類的靜態(tài)屬性分配內(nèi)存桃序;instance的加載甘有,new的時(shí)候分配內(nèi)存。
(10)static可以修飾變量葡缰,稱為靜態(tài)變量亏掀,static可以修飾方法,稱為靜態(tài)方法泛释,類名首次出現(xiàn)時(shí)滤愕,先為靜態(tài)變量分配內(nèi)存,然后調(diào)用靜態(tài)塊怜校,靜態(tài)塊可以為靜態(tài)變量初始化间影。靜態(tài)塊只在類名首次出現(xiàn)時(shí)調(diào)用一次,以后再也不調(diào)用了茄茁。
類
類是具有相同的狀態(tài)和相同的行為的一組對(duì)象的集合魂贬,類是由屬性和方法構(gòu)成的。
類和對(duì)象的關(guān)系
類和對(duì)象的關(guān)系就如同模具和用這個(gè)模具制作出來(lái)的物品之間的關(guān)系裙顽。一個(gè)類給出它的全部對(duì)象的一個(gè)統(tǒng)一的定義付燥,而它的每個(gè)對(duì)象則是符合這種定義的一個(gè)實(shí)體(也稱作實(shí)例),因此類和對(duì)象的關(guān)系就是抽象和具體的關(guān)系愈犹。
實(shí)例化對(duì)象
通過類創(chuàng)建對(duì)象的過程稱為類的實(shí)例化键科。實(shí)例化的結(jié)果是產(chǎn)生了一個(gè)實(shí)例,實(shí)例也叫對(duì)象漩怎,new就是實(shí)例化的意思勋颖,new也是分配內(nèi)存的意思。