關(guān)于static java 參數(shù)變了數(shù)據(jù)沒變這個問題很多朋友還不知道,今天小六來為大家解答以上的問題,現(xiàn)在讓我們一起來看看吧!
1、是靜態(tài)修飾符,什么叫靜態(tài)修飾符呢?大家都知道,在程序中任何變量或者代碼都是在編譯時由系統(tǒng)自動分配內(nèi)存來存儲的,而所謂靜態(tài)就是指在編譯后所分配的內(nèi)存會一直存在,直到程序退出內(nèi)存才會釋放這個空間,也就是只要程序在運行,那么這塊內(nèi)存就會一直存在。
2、這樣做有什么意義呢? 在Java程序里面,所有的東西都是對象,而對象的抽象就是類,對于一個類而言,如果要使用他的成員,那么普通情況下必須先實例化對象后,通過對象的引用才能夠訪問這些成員,但是有種情況例外,就是該成員是用static聲明的(在這里所講排除了類的訪問控制),例如: 未聲明為static class ClassA{ int b; public void ex1(){ … } } class ClassB{ void ex2{ int i; ClassA a = new ClassA(); i = a.b; //這里通過對象引用訪問成員變量b a.ex1; //這里通過對象引用訪問成員函數(shù)ex1 } } 聲明為static class ClassA{ static int b; static void ex1(){ … } } class ClassB{ void ex2{ int i; i = ClassA.b; //這里通過類名訪問成員變量b ClassA.ex1; //這里通過類名訪問成員函數(shù)ex1 } } 通過以上兩種比較,就可以知道static用來修飾類成員的主要作用了,在java類庫當(dāng)中有很多類成員都聲明為static,可以讓用戶不需要實例化對象就可以引用成員,最基本的有Integer.parseInt(),F(xiàn)loat.parseFloat()等等用來把對象轉(zhuǎn)換為所需要的基本數(shù)據(jù)類型。
3、這樣的變量和方法我們又叫做類變量和類方法。
4、 接下來講一下被static修飾后的變量的值的問題,剛才在前面講過,被static修飾后的成員,在編譯時由內(nèi)存分配一塊內(nèi)存空間,直到程序停止運行才會釋放,那么就是說該類的所有對象都會共享這塊內(nèi)存空間,看一下下面這個例子: class TStatic{ static int i; public TStatic(){ i = 4; } public TStatic(int j){ i = j; } public static void main(String args[]){ TStatic t = new TStatic(5); //聲明對象引用,并實例化 TStatic tt = new TStatic(); //同上 System.out.println(t.i); System.out.println(tt.i); System.out.println(t.i); } } 這段代碼里面Tstatic類有一個static的int變量I,有兩個構(gòu)造函數(shù),第一個用于初始化I為4,第二個用于初始化i為傳進(jìn)函數(shù)的值,在main中所傳的值是5,程序首先聲明對象的引用t,然后調(diào)用帶參數(shù)的構(gòu)造函數(shù)實例化對象,此時對象t的成員變量I的值為5,接著聲明對象tt,調(diào)用無參數(shù)的構(gòu)造函數(shù),那么就把對象tt的成員變量i的值初始化為4了,注意了,在這里i是static,那就是說該類的所有對象都共享該內(nèi)存,那也就是說在實例化對象tt的時候改變了i的值,那么實際上對象t的i值也變了,因為實際上他們引用的是同一個成員變量。
5、最后打印的結(jié)果是三個4。
6、呵呵,寫到這里大家是否明白了呢?不明白就再看看書或者多寫幾個例子印證一下,呵呵。
本文分享完畢,希望對大家有所幫助。
標(biāo)簽:
免責(zé)聲明:本文由用戶上傳,如有侵權(quán)請聯(lián)系刪除!