Java基礎--對象

Q1:用什麼操作對象?

A1:句柄,即Handle,再換個說法,引用,甚至指針。

 

Q2:對象保存在哪裏?

A2:一般對象存的地方無非在這幾個區域中:寄存器,堆棧,棧,靜態存儲區,ROM,非RAM存儲(比如字節流);在Java中,主要存儲在堆和棧,具體可以分爲方法逃逸(存在堆),線程逃逸(存在堆),和無逃逸(存儲在棧)三種方式。

 

Q3:對象的初始化?

A3:對象可以分爲是static和非static兩種,兩種對象的初始化順序是不一樣的。

就宏觀上來說,假設兩種對象都存在:

總的順序是先static後非static先基類後本類

具體是先基類的static字段初始化,然後本類中的static字段初始化,再到基類的非靜態,再到本類中的非靜態,之後執行基類中的構造器,再到本類構造器執行。

就微觀來說,在深入理解jvm裏也有講過,Java解釋器先查找類的路徑,定位class文件,加載class對象,創建class對象,然後初始化靜態對象,當使用new關鍵詞時,先在堆上分配空間,之後空間全部清零,即null,再開始非靜態對象的初始化,再執行構造器。

 

Q4:static對象創建的特點?

靜態變量定義時,如果是基本類型,如char,int等,先根據標準對其賦值初始值,如果是指向一個對象的句柄,則除非new一個對象連接起來,否則是null。

如果定義時同時初始化,那麼跟非靜態類似,但不同的是static只有一個存儲區域,並且只初始化一次,這個過程發生在Class對象首次載入的時候。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章