# 什麼是靜態 (Static) 在Java中,static關鍵字可用來修飾屬性、方法和類別。 在屬性、方法或類別前面加上關鍵字「static」,就是告訴Java編譯器,遇到static修飾的東西,就要優先分配記憶體空間給它。 要更深入了解static的意義,要搭配「全域變數和局部變數」的觀念一起看。static修飾的東西就相當於全域變數,在程式的進入點main()方法「之前」就會被分配到記憶體空間,並且不會在執行完一段敘述之後就釋放出記憶體空間,除非程式結束,都會保留著static的資料,所以也有「共享」的功能。 比較有加static跟沒有加static修飾的差異,決定性的不同是「載入記憶體的時機」。static關鍵字修飾的東西,在程式的進入點main()方法「之前」就會被分配到記憶體,並且在整個程式的執行期間都不會釋放掉static資料的記憶體空間,所以才稱為靜態。 可以被宣告成靜態(前面加上static關鍵字)的東西有屬性、方法和類別。不過只建議使用靜態類別,原因以下詳述: 一、靜態屬性(static property): 我們可以不要用static修飾一整個類別,而可以只修飾類別中的某一個屬性(成員變數)。存取的方式是: 類別名稱 . 靜態屬性 ; 就像我們存取一般物件的屬性一樣,是透過「.」運算子來存取,但靜態屬性要使用類別名稱去存取,而不是物件名稱。 二、靜態方法(static methods): 我們可以不要用static修飾一整個類別,而可以只修飾類別中的某一個方法(成員函數)。存取的方式是: 類別名稱 . 靜態方法 ; 就像我們存取一般物件的方法一樣,是透過「.」運算子來存取,但靜態方法要使用類別名稱去存取,而不是物件名稱。 不過建議,盡量少宣告靜態屬性和靜態方法,因為我們知道static修飾的屬性或方法有「共享」的特性,在整個程式結束之前都不會釋放掉它所佔用的記憶體空間,就像我們宣告全域變數一樣,會很難掌控全域資料的變化,所以會經常發生很難除錯的bug。 還有一個很大的問題,宣告成靜態屬性或靜態方法的東西,會經常混淆到底要用類別名稱去存取?還是用物件名稱去存取?所以「不建議」把類別成員宣告成靜態屬性或靜態方法。 三、靜態類別(static class): 顧名思義,就是在程式的進入點main()方法,以及做實體化建立物件(new + 建構子)「之前」,就給它分配記憶體空間的類別,所以靜態類別不需要實體化就能用,我們就能以「類別名稱 . 屬性」和「類別名稱 . 方法()」的方式來存取靜態類別的屬性或呼叫(執行)方法。 注意,因為靜態類別已經在一開始就被分配到記憶體空間,所以靜態類別不能再以new + 建構子實體化了,這樣就相當於重複分配記憶體空間,會發生編譯錯誤。
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.