java Static的使用

static是一個靜態修飾符,用於修飾成員(成員變量,成員函數)。《thinking in java》對staic的使用場景有下面2種定義:「一種情形是隻想用一個存儲區域來保存一個特定的數據—— 不管要建立多少個對象,甚至根本不建立對象。另外一種情形是咱們須要一個特殊的方法,它沒有與這個類的任何對象關聯。也就是說,即便沒有建立對象,也須要一個能調用的方法」。。在類中,用static聲明的成員變量成爲靜態成員變量,用static聲明的方法即稱爲靜態方法。對於static,它有以下幾個特色:html

 1.隨着類的加載而加載。java

一旦static被建立,它會一直存在靜態常量池中,知道程序執行完,隨着類的消失而消失,它的生命週期相對來講是最長的。函數

2.優先於對象存在this

靜態是優先於對象存在的。spa

舉個例子:code

public class Demo {

    public static void main(String[] args) {
        Test.name="hello";
        Test.staticHello();//優於對象建立,因此能夠直接調用static修飾的方法
        //Test.age=0 //調用非靜態變量age會報錯,由於對象還未建立
        Test t=new Test();//建立對象
        t.age=18;//這個時候就能夠調用非靜態變量和方法
        t.normalHello();
        
    }
}
class Test{
    static String name;
    int age;
    public static void staticHello(){
        System.out.println("static name:"+name);
    }
    public void normalHello(){
        System.out.println("normal age:"+age);
    }
}

輸出結果爲:orm

static name:hello
normal age:18htm

 

從這個例子還能夠看出,咱們能夠在沒有建立對象的狀況下,經過類名直接調用static修飾的方法和變量,因此能夠得知,static是不依賴於對象存在的,即對象

3.被類的全部對象所共享blog

所以,靜態的成員變量和方法也不能使用this,super關鍵字,這2個關鍵字都是基於對象的。

4.能夠直接被類名所調用

在上述的例子中,能夠看到static修飾的變量方法是直接經過類名Test調用出來的,固然,在建立對象以後,一樣可使用建立的對象去調用這個方法。

在不建立對象的狀況下,靜態方法不能訪問類的非靜態成員變量/方法,main方法就是一個靜態方法,假如咱們在Demo類裏建立一個成員變量String names,要在main方法裏直接取到這個值是不行的,若是沒有建立對象,它就不能直接訪問。而非靜態方法能夠訪問靜態成員/方法

《Thinking in java4》中「當程序建立第一個對類的靜態成員的引用時,就會加載這個類。這個證實構造器也是類的靜態方法,即便在構造器以前沒有使用static關鍵字」。由於靜態方法能夠在未建立對象時調用,從這個角度看,構造方法在對象未建立時調用,能夠看做是靜態方法。
但從另外一個方面來看,靜態方法不能調用實例方法,而構造方法能夠調用實例方法,因此構造方法也不算是靜態方法。

 

轉載請註明出處http://www.cnblogs.com/epilogue/p/5670220.html 

相關文章
相關標籤/搜索