Q1:用什麼操做對象?jvm
A1:句柄,即Handle,再換個說法,引用,甚至指針。spa
Q2:對象保存在哪裏?線程
A2:通常對象存的地方無非在這幾個區域中:寄存器,堆棧,棧,靜態存儲區,ROM,非RAM存儲(好比字節流);在Java中,主要存儲在堆和棧,具體能夠分爲方法逃逸(存在堆),線程逃逸(存在堆),和無逃逸(存儲在棧)三種方式。指針
Q3:對象的初始化?對象
A3:對象能夠分爲是static和非static兩種,兩種對象的初始化順序是不同的。class
就宏觀上來講,假設兩種對象都存在:變量
總的順序是先static後非static先基類後本類引用
具體是先基類的static字段初始化,而後本類中的static字段初始化,再到基類的非靜態,再到本類中的非靜態,以後執行基類中的構造器,再到本類構造器執行。方法
就微觀來講,在深刻理解jvm裏也有講過,Java解釋器先查找類的路徑,定位class文件,加載class對象,建立class對象,而後初始化靜態對象,當使用new關鍵詞時,先在堆上分配空間,以後空間所有清零,即null,再開始非靜態對象的初始化,再執行構造器。static
Q4:static對象建立的特色?
靜態變量定義時,若是是基本類型,如char,int等,先根據標準對其賦值初始值,若是是指向一個對象的句柄,則除非new一個對象鏈接起來,不然是null。
若是定義時同時初始化,那麼跟非靜態相似,但不一樣的是static只有一個存儲區域,而且只初始化一次,這個過程發生在Class對象首次載入的時候。