java里類變量和實例變量的區(qū)別

java里類變量和實例變量的區(qū)別

每次創(chuàng)建一個類的對象的時候,系統(tǒng)為它創(chuàng)建了類的每一個實例變量的副本。我們就可以從對象中訪問該實例變量。

類變量或說靜態(tài)變量跟實例變量是不一樣的,不管為一個類創(chuàng)建了多少個對象,系統(tǒng)只為每個類變量分配一次存儲空間。

系統(tǒng)為類變量分配的內(nèi)存是在執(zhí)行main方法時馬克-to-win, 就是在程序最最開始的時候(見下面StaticDemo的例子)。所有的對象共享了類變量??梢酝ㄟ^對象或者通過類本身來訪問類變量。
Static?fieldsA?field?define?as?static,?means?there?is?only?one?such?field?shared?by?all?objectsInstance?fieldsA?field?define?without?static,?means?each?object?has?its?own?copy?of?fields
順便提一句:通常用下面的形式,定義類的常量。

(類或?qū)嵗伎梢栽L問)
static?final?double?PI=3.14159;
靜態(tài)方法(方法前冠以static)和實例方法(前面未冠以static)的區(qū)別調(diào)用靜態(tài)方法或說類方法時,可以使用類名做前綴,也可以使用某一個具體的對象名;通常使用類名。非static的方法是屬于某個對象的方法,而static的方法是屬于整個類的,不被任何一個對象單獨擁有;由于static方法是屬于整個類的,所以它不能操縱和處理屬于某個對象的成員變量,而只能處理屬于整個類的成員變量,也即,static方法只能處理static域或靜態(tài)方法。實例方法可以訪問實例域, 靜態(tài)域或靜態(tài)方法, 記住都行。

聲明為static的方法有以下幾條限制: 1.它們僅能調(diào)用其他的static方法。2.它們只能訪問static數(shù)據(jù)。3.它們不能以任何方式引用this或super(關(guān)鍵 字super與繼承有關(guān),在下一章中描述)。

static?method?Have?No?this?ReferenceAll?instance?methods?have?a?hidden?parameter—thisSo,Static?method?can’t?access?instance?methods?and?fields;?it?can?only?invoke?other?static?class?members.It?can?access?class?members?only.?instance?can?use?static?method.Instance?methods:If?a?method?is?declared?without?the?static?modifier?keyword,?that?method?is?known?as?an?instance?method.?Instance?methods?are?associated?with?objects?–?not?classes.It?can?access?either?instance?or?class?members.?class?StaticExa?{static?int?a?=?4;static?int?b?=?9;static?void?call()?{System.out.println(\”a?=?\”?+?a);//靜態(tài)方法可以訪問靜態(tài)屬性}}public?class?Test?{static?int?c?=?43;public?static?void?main(String?args[])?{/*剛運行到這一步時,debug觀察,StaticExa.a的值就等于42,Test.c的值就等于43,說明系統(tǒng)在我們的程序一開始時,就會給所有的類變量賦值。

java靜態(tài)變量的與實例變量的區(qū)別

java類的成員變量有倆種:一種是被static關(guān)鍵字修飾的變量,叫類變量或者靜態(tài)變量;另一種沒有static修飾,為實例變量。
1、在語法定義上的區(qū)別:
靜態(tài)變量前要加static關(guān)鍵字,而實例變量前則不加。

2、在程序運行時的區(qū)別:
實例變量屬于某個對象的屬性,必須創(chuàng)建了實例對象,其中的實例變量才會被分配空間,才能使用這個實例變量。

靜態(tài)變量不屬于某個實例對象,而是屬于類,所以也稱為類變量,只要程序加載了類的字節(jié)碼,不用創(chuàng)建任何實例對象,靜態(tài)變量就會被分配空間,靜態(tài)變量就可以被使用了??傊?,實例變量必須創(chuàng)建對象后才可以通過這個對象來使用,靜態(tài)變量則可以直接使用類名來引用。
舉例說明:
對于下面的程序,無論創(chuàng)建多少個實例對象,永遠都只分配了一個staticVar變量,并且每創(chuàng)建一個實例對象,這個staticVar 就會加1;但是,每創(chuàng)建一個實例對象,就會分配一個instanceVar,即可能分配多個instanceVar,并且每個instanceVar的值都只自加了1次。

類的靜態(tài)變量在內(nèi)存中只有一個,java虛擬機在加載類的過程中為靜態(tài)變量分配內(nèi)存,靜態(tài)變量位于方法區(qū),被類的所有實例共享。

靜態(tài)變量可以直接通過類名進行訪問,其生命周期取決于類的生命周期。
而實例變量取決于類的實例。每創(chuàng)建一個實例,java虛擬機就會為實例變量分配一次內(nèi)存,實例變量位于堆區(qū)中,其生命周期取決于實例的生命周期。

java中類變量、實例變量和局部變量有何區(qū)別?

類變量:比較特殊的實例變量,用static修飾的,一個類共用這個變量,所有由這類生成的對象都共用這個變量,類裝載時就分配存儲空間。一個對象修改了變量,則所以對象中這個變量的值都會發(fā)生改變。

實例變量:從屬于類,由類生成對象時,才分配存儲空間,各對象間的實例變量互不干擾,能通過對象的引用來訪問實例變量。

Java中局部變量,靜態(tài)變量和實例變量的區(qū)別

實例變量又稱成員變量:

成員變量定義在類中,百科在整個類中都可以被訪問
成員變量隨著對象的建立而建立,隨對象的消失而消失,存在于對象所在的對內(nèi)存中
成員變量有默認(rèn)初始值

局部變量:

定義在方法中或方法的參數(shù)列表(或者語句中)
存在于棧內(nèi)存中,作用的范圍結(jié)束,變量空間自動釋放
默認(rèn)沒有初始化值,使用時需要進行初始化

靜態(tài)變量又稱類變量:用static修飾

存儲在方法區(qū)中
隨著類的加載而存在,隨著類的消失而消失
可以由類名或?qū)ο笳{(diào)用

偽代碼說明
public?class?Variable{?static?int?a?=?0;?//類變量?String?b?=?\”hello?world\”;//實例變量?public?void?method(){?int?c?=?0;?//局部變量?}}