首頁  >  文章  >  後端開發  >  static,何時用,何時不用

static,何時用,何時不用

WBOY
WBOY原創
2016-07-30 13:30:322040瀏覽

學完static以後,同學都覺得用static修飾的成員特別方便創建的成員倒顯得麻煩了,非得創建物件才能使用,但我們平常定義方法時又很少使用static。為什麼呢,那什麼時候用static,什麼時候不用static呢? 我們拋開

static

成員使用的特點,理解一下static 類的一個成員被static

修飾後,該成員就屬於類的成員了,被所有對象共享,如果成員是成員變量,那麼該成員以及該成員的值就屬於類的成員了,被所有對象共享,如果成員是成員變量,那麼該成員以及該成員的值就屬於類的成員被所有物件所共享;如果成員是成員方法,那麼該方法就被所有物件共享;相反如果成員沒有用static修飾,那麼每個物件就有自己的成員,這時可以說,每個物件的成員都是他私有的,注意這和權限控制裡的私有權限是兩碼事。可以想像,共享的方法只能存取共享的成員,是無法存取物件私有的成員的,而物件私有的成員方法是可以存取共享的成員的。打個比方,就像我們給公家工作肯定花的是公家的錢,絕不會花私人的錢,而給自己幹活時,卻可以花公家的錢,只要公家不追究。這就是為什麼static修飾static修飾的成員,如static 修飾的初始化區塊還有static修飾的內部類別皆如此。也有的人把static理解為靜態的或全局的,其實差不多,因為靜態的對應者動態的,全局的對應著局部的,看你從哪個角度去理解。 在實際開發中,之所以給類定義成員變量,就是因為該類有不同狀態的對象,比如我們定義人這個類,一般會定義年齡、姓名等屬性,然後不同的人(這裡就是人這個類的對象了)雖然都有年齡和姓名,但各有各的年齡,各有各的姓名,這就是上面說的每個對象的成員是該對象私有的。如果把年齡和姓名定義成static的,那就導致所有的人都有相同的年齡和姓名,顯然這沒有意義。 現在回答什麼時候使用

static修飾成員方法。

       我個人的理解很簡單,只要該成員方法不需要與非static的成員打交道,就可以使用

static。換句話說,只要該方法的執行與物件本身的狀態沒有關係,就可以使用static(這個結論可能過於草率)。這類方法通常只對傳入的參數作處理,執行過程和自身狀態毫無關係,例如我們熟知的IntegerString                     Integer.toBinaryString(10);String.

valueOf(12);valueOf(12); String

雖然都有非 static的成員,但是這兩個方法都不與非

static的成員打交道,所以可以定義成static的成員打交道,所以可以定義成的。

通常,我們在定義一個工具類時,一般把它的方法定義成static的,因為這種類只用作工具,只關注他的行為,不關注他的狀態,所以不需要定義成員變數。使用這種工具類別的方法時無需建立對象,既簡單又節省資源。創建物件來呼叫反而麻煩且浪費資源,所以這種類別被設計出來後就乾脆不允許創建對象,因為其構造方法被設計成private權限了。例如我們用的MathArrays,還有Collections,還有Collections。這三個類別時我們java

中最常見的三個工具類別。        static在實際開發中有很多巧妙的用法,只有理解了static

的意義,我們才能領略其中的巧妙。

🎜 🎜 以上就介紹了static,何時用,何時不用,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。 🎜 🎜 🎜
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn