這篇文章主要介紹了Java中static和非static的相關內容,小編覺得還是很不錯的,這裡分享給大家,需要的朋友可以參考下。
關於static和非static變數的差異
#1. static 修飾的變數稱為類別變數或全域變數或成員變量,在類別中載入的時候成員變數即被初始化,與類別關聯,只要類別存在,static變數就存在。非static修飾的成員變數是在物件new出來的時候劃分儲存空間,是與具體的物件綁定的,該成員變數僅為當前物件所擁有的。
2. static修飾的變數在載入的時候先於main方法載入在記憶體中的資料共享區-------方法區,而非static的變數在載入的時候,是要建立變數才載入在堆記憶體中的。
3. 一個static變數單獨劃分一塊儲存空間,不與特定的物件綁定在一起,該儲存空間被類別的各個物件共享。 static變數值在方法區載入一次,而非static在建立物件時會載入很多次。每次創建都會拷貝一份。
4. 物件在引用成員變數是直接透過類別名稱.變數名稱調用,物件在引用實例變數時只能透過物件名稱.變數名調用。
5. 在類別中調用成員變數時直接調用或以類別名稱.變數名稱方式調用,實例變數則用this或直接呼叫。
關於static方法和非static方法的差異
1. static修飾的方法也和static相同。先於main方法被載入到方法區,以便共享使用。
2. 靜態的static方法中不能使用this或super關鍵字,因為static方法是先於物件建立之前就已經載入的方法,是屬於類別的方法,而this和super指向的是本類別的對像或是父類別的對象,非靜態的方法是屬於對象的,方法裡可以用this和super。
3. static方法可以用物件.方法名來調用,也可以用類別名稱.方法名稱來調用。而非靜態的方法只能建立物件後時呼叫。
4. static方法是載入一次,被所有的物件共用。而非靜態方法是有多少個物件就拷貝多少次,每個物件只能呼叫自己的拷貝的方法。
5. 當物件呼叫非靜態的方法時,不考慮執行緒安全性的問題,而呼叫靜態方法時,要考慮安全性的問題。因為靜態方法只有一份。而物件的方法是自己有自己的。
6. 在同一個類別中,靜態方法中只能存取類別中的靜態成員。而非靜態方法可以存取非靜態的方法(使用類別名稱調用,或創創建本類別的物件調用)。
總結
#以上是Java中static與非static差異的簡單介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!