static是靜態(tài)修飾符镜硕。大家都知道称近,在程序中任何變量或者代碼都是在編譯時由系統(tǒng)自動分配內(nèi)存來存儲的,而所謂靜態(tài)就是指在編譯后所分配的內(nèi)存會一直存在傅蹂,直到程序退出內(nèi)存才會釋放這個空間纷闺,也就是只要程序在運(yùn)行,那么這塊內(nèi)存就會一直存在份蝴。
這樣做的意義所在就是:
- 修飾方法的時候犁功,可以不用實例化類的對象,直接用類名.方法名調(diào)用婚夫。
- 修飾變量的時候浸卦,因為在編譯時由內(nèi)存分配一塊內(nèi)存空間,直到程序停止運(yùn)行才會釋放案糙,所以該類的所有對象都會共享這塊內(nèi)存空間限嫌。同樣的靴庆,如果該變量在不同函數(shù)之間調(diào)用,該變量也是會保存上一次對該變量的修改怒医。
具體的代碼示例:
在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ù)類型。這樣的變量和方法我們又叫做類變量和類方法蠢络。
關(guān)于static修飾變量的例子
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);
}
}
最后的結(jié)果均為4.因為在第一次實例化的時候把i賦值為5,然后在第二次實例化的時候又把i賦值為4刹孔,因為i是static靜態(tài)變量啡省,二者所賦值的對象實際上是一塊內(nèi)存,所以第二次賦值就覆蓋了第一次的賦值髓霞,最后打印的結(jié)果均為4.
美圖一張卦睹,學(xué)習(xí)之余放松一下吧