类的加载连接和初始化
生活随笔
收集整理的這篇文章主要介紹了
类的加载连接和初始化
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
類的加載、連接和初始化
? 當Java程序中需要使用到某個類時,虛擬機會保證這個類已經被加載、連接和初始化。而連接又包含驗證、準備和解析這三個子過程,這個過程必須嚴格的按照順序執行。
類的加載
? 通過類的完全限定名(包名和類名)查找此類的字節碼文件,把類的.class文件中的二進制數據讀入到內存中,并存放在運行時數據區的方法區內。然后利用字節碼文件創建一個Class對象,用來封裝類在方法區內的數據結構并存放在堆區內。這個過程是由類加載器完成的,我們后面會進行詳細講解。
連接
-
驗證:確保被加載類的正確性。class文件的字節流中包含的信息符合當前虛擬機要求,不會危害虛擬機自身安全。
-
準備:為類的靜態變量分配內存,并將其初始化為默認值。此階段僅僅只為靜態類變量(即static修飾的字段變量)分配內存,并且設置該變量的初始值。(比如 static int num=5,這里只將num初始化為0,5的值將會在初始化時賦值)。對于final static修飾的變量,編譯的時候就會分配了,也不會分配實例變量的內存。
-
解析:把類中的符號引用轉換為直接引用。符號引用就是一組符號來描述目標,而直接引用就是直接指向目標的指針、相對偏移量或一個間接定位到目標的句柄。(可參考“虛擬機指令”相關內容)
初始化
? 類加載最后階段,若該類具有父類,則先對父類進行初始化,執行靜態變量賦值和靜態代碼塊代碼,成員變量也將被初始化。
總結
以上是生活随笔為你收集整理的类的加载连接和初始化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java 扫描并加载包路径下class文
- 下一篇: 根类加载器