類的載入過程:
1、在建立物件時,會先判斷物件所屬的型別(類)在記憶體中是否存在,如果存在則直接使用;如果不存在,則把類載入到記憶體中的方法區下
2、在把類(.class)載入到方法區時,分兩種情況: 2.1、從.class檔案的上面向下依次載入內容 2.2、靜態的內容載入到方法區的靜態區域下 非靜態內容載入到方法區的非靜態區域下
3、當.class中的內容全部載入到方法區後,會對靜態區域下的所有靜態變數進行預設初始化
4、當所有的靜態變數預設初始化完成之後,再對靜態變數進行顯式初始化
5、在對所有的靜態變數顯式初始化完成之後,會呼叫靜態**塊進入到棧中執行
6、只有在所有的靜態**塊全部執行(按照靜態**塊在.class檔案中的先後書寫順序執行)完之後,整個.class的載入才完成。在類載入完成之後,就可以建立物件了:
物件的建立過程:
1、在堆中開闢一塊空間,在開闢完後,給空間分配乙個位址
2、當空間分配位址後,把所有的非靜態成員全部載入到開闢的空間下
3、當所有的非靜態成員全部載入完成之後,對所有的非靜態成員變數進行預設初始化
4、在所有的非靜態成員變數預設初始化完成之後,呼叫該物件的建構函式進入到棧中執行
5、在棧中建構函式執行時,會分為兩部分: 5.1、第一部分:隱式三步 1、執行super()語句 2、顯式初始化所有的非靜態成員變數 3、把構造**塊加到棧中執行 5.2、第二部分:在隱式三步,執行完之後,才會執行建構函式中所書寫的**
類的載入過程
person person new person 為例進行說明。1 因為new用到了person.class,所以會先找到person.class檔案,並載入到記憶體中 2 執行該類中的static 塊,如果有的話,給person.class類進行初始化 3 在堆記憶體中開闢空間分配記憶體位址 4 ...
類的載入過程
類的載入過程,可分為三個階段,載入 連線 初始化。初始化,為類的靜態變數賦予預設的初始值 jvm規範規定了以下六種主動使用類的場景 被動呼叫,不會導致類的載入和初始化 先看乙個面試題 public class singleton public static singleton getinstance...
類的載入過程
首先要知道的一點 程式呼叫時,jvm會初始化,初始化的過程中會生成多個類載入器,jvm呼叫指定的類載入器去載入類即可。類載入器分為兩類 系統提供和手動編寫 系統提供 解釋 我們把每一層上面的類載入器叫做當前層類載入器的父載入器,當然,它們之間的父子關係並不是通過繼承關係來實現的,而是使用組合關係來復...