1. 程式人生 > >一個class去獲取另一個class的static變數卻一直為空解決方法

一個class去獲取另一個class的static變數卻一直為空解決方法

java static生命週期
Static:

載入:java虛擬機器在載入類的過程中為靜態變數分配記憶體。
類變數:static變數在記憶體中只有一個,存放在方法區,屬於類變數,被所有例項所共享
銷燬:類被解除安裝時,靜態變數被銷燬,並釋放記憶體空間。static變數的生命週期取決於類的生命週期
類初始化順序:

靜態變數、靜態程式碼塊初始化
建構函式
自定義建構函式
結論:想要用static存一個變數,使得下次程式執行時還能使用上次的值是不可行的。因為靜態變數生命週期雖然長(就是類的生命週期),但是當程式執行完,也就是該類的所有物件都已經被回收,或者載入類的ClassLoader已經被回收,那麼該類就會從jvm的方法區解除安裝,即生命期終止。

更進一步來說,static變數終究是存在jvm的記憶體中的,jvm下次重新執行時,肯定會清空裡邊上次執行的內容,包括方法區、常量區的內容。

要實現某些變數在程式多次執行時都可以讀取,那麼必須要將變數存下來,即存到本地檔案中。常用的資料存取格式:XML、JSON、Propertities類(類似map的鍵值對)等

分析:
把AAA類的main方法放到BBB類的main法中。你兩個main方法相當於啟動兩個程式,兩個程式之間不共享記憶體,BBB類的main方法啟動時不會呼叫AAA的test方法,也就沒有初始化靜態變數,所以一直是null。
解決:
寫在一個類裡面,同時用兩個main方法不共享記憶體,無法獲取。