天天看點

靜态對象和非靜态對象的差別

靜态對象 vs非靜态對象   

是類共同擁有的  是類獨立擁有的

記憶體空間上是固定的空間在各個附屬類裡面配置設定

先配置設定靜态對象的空間後對非靜态對象配置設定空間,即初始化順序是先靜态再非靜态

關于靜态對象、靜态方法、靜态屬性 差別:屬性VS參數 參數一般是指在方法裡臨時建立的數值或對象;屬性是類聲明部分聲明的資訊。 1、靜态對象的資料在程式全局是唯一的,一改都改;如果要處理的東西是整個程式中唯一的,就可以聲明成靜态對象,類似于C++中的全局變量;另,程式全局範圍内,可以有多個某個類的全局變量。但,這并并不是真正的全局變量,static和final共同修飾的成員變量和成員方法,才可簡單了解為“全局變量”。 a)對于變量,表示一旦給值就不可修改,且程式全局範圍内類名可以通路; b)對于方法,表示不可覆寫,且程式全局範圍内可以通過類名直接通路。 2、非靜态對象的資料各是各的,某個類的每個非靜态對象之間互不影響,修改其中一個對象或其資料并不影響其餘非靜态對象。  3、靜态對象和非靜态對象都是對象,是對象都是要執行個體化的。不同之處就是二者的資料表現和存儲方式不一樣。  4、靜态變量(包括靜态對象和靜态的Java中的8中基本變量)在記憶體中隻有一個copy(節省記憶體),JVM隻為靜态變量配置設定一次記憶體,在加載類的過程中完成靜态變量的記憶體配置設定,可以類名直接通路(友善),當然也可以通過對象來通路(但這是不推薦的);對于執行個體變量(即非靜态變量),每建立一個執行個體,就會為執行個體變量配置設定一次記憶體,執行個體變量可以在記憶體中有多個copy,互不影響(靈活)。 5、靜态方法和靜态變量的好處: a) 引用友善;對于公用類型的變量,直接用類名.靜态方法名 或者 類名.靜态變量名 就可  引用并且直接可以修改其屬性值,不用getter和setter方法。 b) 保持資料的唯一性;此資料全局都是唯一的,修改他的任何一處地方,在程式所有使用到的地方都将會展現到這些資料的修改。

c) 有效減少多餘的浪費。

5、靜态方法與靜态屬性的關系 a)靜态方法隻能調用靜态屬性,不能調用非靜态屬性 b)非靜态方法可以随意調用靜态屬性和非靜态屬性