iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 28
0
自我挑戰組

JAVA系列 第 28

JAVA-Static類別成員

  • 分享至 

  • xImage
  •  

類別是物件的藍圖,每一個物件實例都是依據類別中的定義來建立,物件擁有自己的一份變數(資料成員),但是對於方法成員卻是共用的,為了區別呼叫方法時是使用哪一個物件的變數資料,方法呼叫時會隱含 this 參考名稱。
另一方面,您也可以將變數或方法設定為 static,稱之為靜態成員( Static member ),靜態成員屬於類別所有,呼叫靜態方法時不會有 this 參考名稱,所以靜態方法中不可以有非靜態變數,或呼叫非靜態方法。

JAVA中被宣告為static的成員,不會讓個別物件擁有,而是屬於類別,被宣告為static的成員,是將類別名稱作為名稱空間,也就是透過類別名稱與.運算子,就可以取得static成員。
被宣告為static的方法,也是將類別名稱作為名稱空間,可以透過類別名稱與.運算子來呼叫static方法。
Java程式設計領域,早就有許多良好命名慣例,沒有遵守慣例並不是錯,但會造成溝通與維護的麻煩。以類別命名實例來說,首字是大寫,以static使用慣例來說,是透過類別名稱與.運算子來存取。在大家都遵守命名慣例的情況下,看到首字大寫就知道它是類哵,透過類別名稱與.運算子來存取,就會知道它是static成員。所以,你一直在用的System.out、System.in呢?沒錯!out就是System擁有的static成員,in也是System擁有的static成員。
所以out實際上是java.io.PrintStream型態,被宣告為static,屬於System類別擁有。先前遇過的例子還有Integer.parseInt()、Long.parseLong()等剖析方法,根據命名慣例,首字大寫就是類別,類別名稱加上.運算子直接呼叫的,就是static成員。
static成員屬於類別所擁有,將類別名稱當作是名稱空間是其最常使用之方式。
與import一樣,import static語法是為了偷懶,但別偷懶過頭,要注意名稱衝突問題,有些名稱衝突編譯器可透過以下順序來解析:

區域變數覆蓋:選用方法中的同名變數、參數、方法名稱
成員覆蓋:選用類別中定義的同名資料成員、方法名稱
重載方法比對:使用import static的各個靜態成員,若有同名衝突,嘗試透用重載判斷
如果編譯器無法判斷,則會回報錯誤。


上一篇
JAVA的Switch
下一篇
JAVA 跳脫字元
系列文
JAVA30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言