static 用法

是靜態修飾符,什麼叫靜態修飾符呢?你們都知道,在程序中任何變量或者代碼都是在編譯時由系統自動分配內存來存儲的,而所謂靜態就是指在編譯後所分配的內存會一直存在,直到程序退出內存纔會釋放這個空間,也就是隻要程序在運行,那麼這塊內存就會一直存在。這樣作有什麼意義呢? 
在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; //這裏經過對象引用訪問成員函數ex1
}
}

聲明爲static
class ClassA{
static int b;
static void ex1(){

}
}
class ClassB{
void ex2{
int i;
i = ClassA.b; //這裏經過類名訪問成員變量b
ClassA.ex1; //這裏經過類名訪問成員函數ex1
}
}
經過以上兩種比較,就能夠知道static用來修飾類成員的主要做用了,在java類庫當中有不少類成員都聲明爲static,可讓用戶不須要實例化對象就能夠引用成員,最基本的有Integer.parseInt(),Float.parseFloat()等等用來把對象轉換爲所須要的基本數據類型。這樣的變量和方法咱們又叫作類變量和類方法。
接下來說一下被static修飾後的變量的值的問題,剛纔在前面講過,被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);
}
}
這段代碼裏面Tstatic類有一個static的int變量I,有兩個構造函數,第一個用於初始化I爲4,第二個用於初始化i爲傳進函數的值,在main中所傳的值是5,程序首先聲明對象的引用t,而後調用帶參數的構造函數實例化對象,此時對象t的成員變量I的值爲5,接着聲明對象tt,調用無參數的構造函數,那麼就把對象tt的成員變量i的值初始化爲4了,注意了,在這裏i是static,那就是說該類的全部對象都共享該內存,那也就是說在實例化對象tt的時候改變了i的值,那麼實際上對象t的i值也變了,由於實際上他們引用的是同一個成員變量。最後打印的結果是三個4。呵呵,寫到這裏你們是否明白了呢?不明白就再看看書或者多寫幾個例子印證一下,呵呵。
相關文章
相關標籤/搜索