A. java中靜態變數和實例變數的區別
Java類的成員變數有2種:一種是被static關鍵字修飾的變數,叫類變數或者靜態變數;另一種沒有static修飾,為實例變數。
在語法定義上的區別:靜態變數前要加static關鍵字,而實例變數前則不加。
在程序運行時的區別:實例變數屬於某個對象的屬性,必須創建了實例對象,其中的實例變數才會被分配空間,才能使用這個實例變數。靜態變數不屬於某個實例對象,而是屬於類,所以也稱為類變數,只要程序載入了類的位元組碼,不用創建任何實例對象,靜態變數就會被分配空間,靜態變數就可以被使用了。總之,實例變數必須創建對象後才可以通過這個對象來使用,靜態變數則可以直接使用類名來引用。
類的靜態變數在內存中只有一個,java虛擬機在載入類的過程中為靜態變數分配內存,靜態變數位於方法區,被類的所有實例共享。靜態變數可以直接通過類名進行訪問,其生命周期取決於類的生命周期。
而實例變數取決於類的實例。每創建一個實例,java虛擬機就會為實例變數分配一次內存,實例變數位於堆區中,其生命周期取決於實例的生命周期。
B. Java中 引用變數,對象,實例變數 三者的區別。
A a = new A();
new A() 對象,A a 引用變數,a = new A()將對象地址給了引用變數。
實例變數也可以叫他全局變數,就是將變數放在類的方法之外的變數。
所以引用對象是用於存儲對象地址的,實例變數描述的是變數位置。
C. java里類變數和實例變數的區別
每次創建一個類的對象的時候,系統為它創建了類的每一個實例變數的副本。我們就可以從對象中訪問該實例變數。
類變數或說靜態變數跟實例變數是不一樣的,不管為一個類創建了多少個對象,系統只為每個類變數分配一次存儲空間。系統為類變數分配的內存是在執行main方法時馬克-to-win, 就是在程序最最開始的時候(見下面StaticDemo的例子)。所有的對象共享了類變數。可以通過對象或者通過類本身來訪問類變數。
Staticfields
Afielddefineasstatic,
Instancefields
Afielddefinewithoutstatic,
順便提一句:通常用下面的形式,定義類的常量。(類或實例都可以訪問)
staticfinaldoublePI=3.14159;
靜態方法(方法前冠以static)和實例方法(前面未冠以static)的區別
調用靜態方法或說類方法時,可以使用類名做前綴,也可以使用某一個具體的對象名;通常使用類名。
非static的方法是屬於某個對象的方法,而static的方法是屬於整個類的,不被任何一個對象單獨擁有;
由於static方法是屬於整個類的,所以它不能操縱和處理屬於某個對象的成員變數,而只能處理屬於整個類的成員變數,也即,static方法只能處理static域或靜態方法。實例方法可以訪問實例域, 靜態域或靜態方法, 記住都行。
聲明為static的方法有以下幾條限制: 1.它們僅能調用其他的static方法。
2.它們只能訪問static數據。
3.它們不能以任何方式引用this或super(關鍵 字super與繼承有關,在下一章中描述)。
—this
So,
Static
methodcan』;itcanonlyinvoke
otherstaticclassmembers.Itcanaccessclassmembersonly.
instancecanusestaticmethod.
Instancemethods:
,
.Instancemethods
areassociatedwithobjects–notclasses.
.
classStaticExa{
staticinta=4;
staticintb=9;
staticvoidcall(){
System.out.println("a="+a);//靜態方法可以訪問靜態屬性
}
}
publicclassTest{
staticintc=43;
publicstaticvoidmain(Stringargs[]){
/*剛運行到這一步時,debug觀察,StaticExa.a的值就等於42,Test.c的值就等於43,
說明系統在我們的程序一開始時,就會給所有的類變數賦值。如果是對象參考,就是null,
見photoshop的例子*/
System.out.println("開始觀察StaticExa.a和Test.c");
詳情網上找「馬克-to-win」,參考他的網站或他的網路空間:java第2章的內容
D. java中類變數和實例變數區別(數值的改變)
類變數(即靜態變數)是全局變數,所有的實例(如你提到的a1、a2)共享的變數。如果你在一個實例中改變了其值,那麼所有的實例的這個變數的都會改變,例如 a1.a=10,那麼你列印a2.a的值時也是10。而實例變數是每個實例自己獨有的變數,互不幹擾。就像你上面提到的,如果a1.b=4,列印a2.b還是0,那就說明a2實例中的b還是默認賦值0,並沒有賦值4.
E. java中的實例化和引用變數有什麼區別
區別如下:
實例化就是另外分配一個空間來存儲要實例化的類,引用變數沒有另外創建一個空間,只是多了一個變數指向那個空間而已,比如,
String str1 = "aaaa"; //實例化一個變數str1,創建了一個空間來存放"aaaa".
String str2 = str1; //引用變數, 把str2也指向存放"aaaa"的那個空間。
這樣就可以用str1或者str2對"aaaa"的內容進行改變,不過String 類型的內容不能改變,改變了內容只是 另外創建一個空間存放新的內容,然後把變數名指向新的空間而已。
F. 在Java程序設計中實例變數和類變數有什麼區別
實例變數
是每個對象都有擁有的變數
類變數
是這一類的(即就是這個)擁有的變數啊
你的抽象一下
實例變數
你每new一個對象出來
這個對象裡面就有這個變數
而類變數呢
就只有一個
G. Java里的靜態變數很實例變數的區別是什麼
靜態變數屬於類,該類不生產對象,通過類名就可以調用靜態變數。
實例變數屬於該類的對象,必須產生該類對象,才能調用實例變數。
H. Java中局部變數,靜態變數和實例變數的區別
實例變數又稱成員變數:
成員變數定義在類中,在整個類中都可以被訪問
成員變數隨著對象的建立而建立,隨對象的消失而消失,存在於對象所在的對內存中
成員變數有默認初始值
局部變數:
定義在方法中或方法的參數列表(或者語句中)
存在於棧內存中,作用的范圍結束,變數空間自動釋放
默認沒有初始化值,使用時需要進行初始化
靜態變數又稱類變數:用static修飾
存儲在方法區中
隨著類的載入而存在,隨著類的消失而消失
可以由類名或對象調用
偽代碼說明
publicclassVariable{
staticinta=0;//類變數
Stringb="helloworld";//實例變數
publicvoidmethod(){
intc=0;//局部變數
}
}
I. java中類變數、實例變數和局部變數有何區別
類變數:
比較特殊的實例變數,用static修飾的,一個類共用這個變數,所有由這類生成的對象都共用這個變數,類裝載時就分配存儲空間。一個對象修改了變數,則所以對象中這個變數的值都會發生改變。
實例變數:
從屬於類,由類生成對象時,才分配存儲空間,各對象間的實例變數互不幹擾,能通過對象的引用來訪問實例變數。
局部變數:
方法中或者某局部塊中聲明定義的變數或方法的參數被稱為局部變數
J. java中靜態變數和實例變數到底有什麼區別_看了就知道啦
靜態變數不屬於某 9 * 個實例對象,而是屬於類,所以也稱為類變數,只要程序載入了類的位元組碼, 10 * 不用創建任何實例對象,靜態變數就會被分配空間,靜態變數就可以被使用了。 11 * 總之,實例變數必須創建對象後才可以通過這個對象來使用,靜態變數則可以 12 * 直接使用類名來引用。例如,對於下面的程序,無論創建多少個實例對象, 13 * 永遠都只分配了一個staticInt變數,並且每創建一個實例對象, 14 * 這個staticInt就會加1;但是,每創建一個實例對象,就會分配一個random, 15 * 即可能分配多個random,並且每個random的值都只自加了1次。 16 * 17 * @author hongten 18 * @date 2013-3-2 19*/20publicclass StaticTest { 2122privatestaticint staticInt = 2; 23privateint random = 2; 2425public StaticTest() { 26 staticInt++; 27 random++; 28 System.out.println("staticInt = "+staticInt+" random = "+random); 29 } 3031publicstaticvoid main(String[] args) { 32 StaticTest test = new StaticTest(); 33 StaticTest test2 = new StaticTest(); 34 } 35 }