首頁  >  文章  >  Java  >  java中static怎麼用

java中static怎麼用

(*-*)浩
(*-*)浩原創
2019-05-29 17:14:464808瀏覽

在《Java程式設計思想》P86頁有這樣一段話:

「static方法就是沒有this的方法。在static方法內部不能呼叫非靜態方法,反過來是可以的。而且可以在沒有創建任何物件的前提下,僅透過類別本身來呼叫static方法。這其實正是static方法的主要用途。」

java中static怎麼用

##這段話雖然只是說明了static方法的特殊之處,但是可以看出static關鍵字的基本作用,簡而言之,一句話來描述就是:

方便在沒有創建對象的情況下來進行調用(方法/變量)。

很顯然,被static關鍵字修飾的方法或變數不需要依賴物件來進行訪問,只要類別被載入了,就可以透過類別名稱去進行存取。

static可以用來修飾類別的成員方法、類別的成員變量,另外可以寫static程式碼區塊來最佳化程式效能。

static方法

static方法一般稱為靜態方法,由於靜態方法不依賴任何物件就可以進行訪問,因此對於靜態方法來說,是沒有this的,因為它不依附於任何對象,既然都沒有對象,就談不上this了。而由於這個特性,在靜態方法中不能存取類別的非靜態成員變數和非靜態成員方法,因為非靜態成員方法/變數都是必須依賴特定的物件才能夠被呼叫。

但是要注意的是,雖然在靜態方法中不能存取非靜態成員方法和非靜態成員變量,但是在非靜態成員方法中是可以存取靜態成員方法/變數的。

舉個簡單的例子:

java中static怎麼用

#在上面的程式碼中,由於print2方法是獨立於物件存在的,可以直接用過類別名稱呼叫。假如說可以在靜態方法中存取非靜態方法/變數的話,那麼如果在main方法中有下面一條語句:

MyObject.print2();

此時物件都沒有, str2根本就不存在,所以就會產生矛盾了。同樣對於方法也是一樣,由於你無法預知在print1方法中是否存取了非靜態成員變量,所以也禁止在靜態成員方法中存取非靜態成員方法。

而對於非靜態成員方法,它存取靜態成員方法/變數顯然是毫無限制的。

因此,如果說想在不建立物件的情況下呼叫某個方法,就可以將這個方法設為static。我們最常見的static方法就是main方法,至於為什麼main方法必須是static的,現在就很清楚了。因為程式在執行main方法的時候沒有建立任何對象,因此只有透過類別名稱來存取。

static變數

static變數也稱為靜態變量,靜態變數和非靜態變數的差異是:靜態變數被所有的物件共享,在記憶體中只有一個副本,它當且僅當在類別初次載入時會被初始化。而非靜態變數是物件所擁有的,在創建物件的時候被初始化,存在多個副本,各個物件擁有的副本互不影響。

static成員變數的初始化順序依照定義的順序進行初始化。

private static int i=0;

以上是java中static怎麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn