導航:首頁 > 編程語言 > java中靜態變數和實例變數的區別

java中靜態變數和實例變數的區別

發布時間:2023-05-17 13:13:04

㈠ 類中靜態方法和實例方法的區別

1、調用方式上

靜態方法依賴於類,通過類.靜態方法調用;實例方法依賴於類的對象,需要創建對象後,對象.實例方法使用

2、使用上

實例方法內部不能定義靜態變數,會出現編譯錯誤;實例方法可以直接調用靜態方法;靜態方法內部可以定義和使用實例變數,靜態方法無法直接調用實例方法(因靜態方法載入時類還沒有實例化,實例方法依賴於類的對象)

3、靜態方法和實例方法的內存分配問題

一般認為靜態方法常駐內存,實例方法只有在使用時才分配內存。但事實上,是一樣的,都是在類被載入時常駐內存。static方法和non-static方法在創建實例對象時,屬性的值對各個對象各不相同(每個實例對象的所有欄位在內存中有一個拷貝,用於區分操作哪個對象的欄位),new一個實例時,會把實例屬性放在GCHeap裡面,同時new的對象放在堆棧上,堆棧指針指向剛才拷貝的的內存地址;而靜態方法中的靜態欄位只有一份;對於static和non-static方法代碼都是一樣的,所以只需要一份代碼,佔用一份內存空間。調用速度上因實例方法需要實例化分配內存,靜態方法則不用,故靜態方法會快一點,但也可忽略不計

4、區分靜態方法和實例方法的原因

早期結構化編程幾乎所有方法都是靜態方法,引入實例化方法的概念是在面向對象概念出現以後,區分靜態方法和實例方法不能單單從性能上理解。創建c++、java、c#這樣面向對象語言的大師引入實例化方法一定不是要解決什麼性能、內存的問題,而是為了讓開發更加模式化、面向對象化。這樣說的話,靜態方法和實例化方式的區分是為了解決模式的問題

5、適用場景

靜態方法:一個方法與類的對象無關,如工具類等

實例方法:一個方法依賴於類的對象;多線程場景下,如果靜態方法中含有靜態變數,如果對靜態變數進行更改操作易造成線程安全問題

6、靜態方法與單例模式

如果一個方法與對象的實例無關用靜態方法,反之採用實例方法,但如果方法和對象的實例有關,又想維護一份實例時,需要用單例模式。如系統運行時,需要載入一些的配置和屬性,是公共的,需要在整個生命周期存在,只需要一份就可以,但此時這些配置和屬性又是通過面向對象的編碼方式得到的,雖然用靜態方法也能解決,但最好的方式是採用單例模式

閱讀全文

與java中靜態變數和實例變數的區別相關的資料

熱點內容
sel文件如何轉成excel 瀏覽:942
汽車微信廣告語 瀏覽:931
單精度浮點數據怎麼算 瀏覽:609
網路營銷論文怎麼寫 瀏覽:326
在編程語言中函數是什麼 瀏覽:516
開票軟體金稅盤裡面怎麼數據遷移 瀏覽:591
電腦存放圖片有什麼文件夾 瀏覽:260
appleid不對怎麼激活 瀏覽:574
省份表單代碼 瀏覽:194
js原型繼承運行機制 瀏覽:440
jstl判斷的參數 瀏覽:86
java一個線程如何訪問其他方法 瀏覽:64
數字按鍵手機密碼忘記了怎麼刷機 瀏覽:823
小米怎樣設置指紋解鎖密碼是多少 瀏覽:841
caxa圖形轉為pdf文件 瀏覽:718
文件放在哪裡才能用r打開 瀏覽:130
沒有數據集如何重現別人的實驗 瀏覽:10
編程培訓機構待遇如何 瀏覽:822
機械版2018cad內文件夾 瀏覽:688
編程貓導師訓練在哪裡找 瀏覽:88

友情鏈接