java類加載的幾種方式

回顧下java基礎、很多人可能不知道java中類加載的過程,記得很久以前面試被問過一道面試題如下:

Q:類的加載有幾種方式?
  • new
  • Class.forName()
  • ClassLoader.loadClass()
Q:調用ClassLoader.loadClass()的時候jvm做什麼事情?
  • 這個時候只是把該類加載到jvm中並對它進行了格式校驗,並解析該文件,分配內存並賦值默認值,並且將符號引用替換成直接引用(內存地址)。
Q:這個時候再調用Class.forName()做了什麼事情?
  • 這個時候由於類已經載入,所以不會再次進行加載,所以這個時候會檢查類是否加載如果已加載則就初始化。初始就是執行靜態代碼塊初始化。
Q:那麼假如我定義了一個public int a=10什麼時候這個a=10呢?
  • 實例化的時候,用newInstance()的時候纔開始賦值的,這也就是爲什麼static中不能引用外部非staic變量或者方法的原因。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章