日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java基础代码实例_基础篇:详解JAVA对象实例化过程

發布時間:2025/3/15 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java基础代码实例_基础篇:详解JAVA对象实例化过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 對象的實例化過程

  • 對象的實例化過程是分成兩部分:類的加載初始化,對象的初始化
  • 要創建類的對象實例需要先加載并初始化該類,main方法所在的類需要先加載和初始化
  • 類初始化就是執行方法,對象實例化是執行方法
  • 一個子類要初始化需要先初始化父類

2 類的加載過程

  • 類的加載機制:如果沒有相應類的class,則加載class到方法區。對應著加載->驗證->準備->解析-->初始化階段 加載:載入class對象,不一定是從class文件獲取,可以是jar包,或者動態生成的class驗證:校驗class字節流是否符合當前jvm規范準備:為類變量分配內存并設置變量的初始值(默認值)。如果是final修飾的對象則是賦值聲明值解析:將常量池的符號引用替換為直接引用初始化:執行類構造器(注意不是對象構造器),為類變量賦值,執行靜態代碼塊。jvm會保證子類的執行之前,父類的先執行完畢
  • 其中驗證、準備、解析3個部分稱為 連接
  • 方法由靜態變量賦值代碼和靜態代碼塊組成;先執行類靜態變量顯示賦值代碼,再到靜態代碼塊代碼

3 觸發類加載的條件

  • 第一次創建類的新對象時,會觸發類的加載初始化和對象的初始化函數執行,這個是實例初始化,其他6個都是類初始化
  • JVM啟動時會先加載初始化包含main方法的類
  • 調用類的靜態方法(如執行invokestatic指令)
  • 對類或接口的靜態字段執行讀寫操作(即執行getstatic、putstatic指令);不過final修飾的靜態字段的除外(已經賦值,String和基本類型,不包含包裝類型),它被初始化為一個編譯時常量表達式 注意:操作靜態字段時,只有直接定義這個字段的類才會被初始化;如通過其子類來操作父類中定義的靜態字段,只會觸發父類的初始化而不是子類的初始化
  • 調用JavaAPI中的反射方法時(比調用java.lang.Class中的方法(Class.forName),或者java.lang.reflect包中其他類的方法)
  • 當初始化一個類時,其父類沒有初始化,則需先觸發父類的初始化(接口例外)

4 對象的實例化過程

  • 對象實例化過程 其實就是執行類構造函數 對應在字節碼文件中的()方法(稱之為實例構造器);()方法由非靜態變量、非靜態代碼塊以及對應的構造器組成 ()方法可以重載多個,類有幾個構造器就有幾個()方法()方法中的代碼執行順序為:父類變量初始化,父類代碼塊,父類構造器,子類變量初始化,子類代碼塊,子類構造器。
  • 靜態變量,靜態代碼塊,普通變量,普通代碼塊,構造器的執行順序
  • 具有父類的子類的實例化順序如下

5 類加載器和雙親委派規則,如何打破雙親委派規則

  • 類加載器 通過一個類的全限定名來獲取描述此類的二進制字節流,實現這個動作的代碼模塊稱為類加載器任意一個類都需要其加載器和類本身來確定類在JVM的唯一性;每個類加載器都有自己的類名稱空間,同一個類class由不同的加載器加載,則被JVM判斷為不同的類
  • 雙親委派模型 啟動類加載器有C++代碼實現,是虛擬機的一部分。負責加載lib下的類庫其他的類加載器有java語言實現,獨立于JVM,并且繼承ClassLoaderextention ClassLoader負責加載libext目錄下的類庫application ClassLoader 負責加載用戶路徑下(ClassPath)的代碼不同的類加載器加載同一個class文件會導致出現兩個類。而java給出解決方法是下層的加載器加委托上級的加載器去加載類,如果父類無法加載(在自己負責的目錄找不到對應的類),而交還下層類加載器去加載。如下圖
  • 打破雙親委派模型 雙親委派模型并不是一個強制的約束模型,而是java設計者推薦給開發者的類加載實現方式雙親委派模型很好的解決各個類加載基礎類的同一問題(越基礎的類由越上層的加載器加載),但是基礎類總是作為用戶代碼調用的API,但是如果它的具體實現是下層的代碼,此時基礎類需要調用下層的代碼,則需要打破雙親委派模型如JNDI服務,JNDI的代碼有啟動類去加載(rt.jar),它需要調用由獨立廠商部署在應用程序classpath下的JNDI的SPI(Service Provider Interface)代碼。為了解決SPI代碼加載問題,java引入了線程上下文類加載器去加載SPI代碼。也就是父類加載器請求子類去完成類的加載動作線程上下文類加載器,線程創建時會從父線程繼承,如果全局范圍沒有設置過,則默認設置為application Class Loader


作者:clswcl
鏈接:https://juejin.im/post/6861940021146943502
來源:掘金
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

總結

以上是生活随笔為你收集整理的java基础代码实例_基础篇:详解JAVA对象实例化过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 大奶子情人 | 日韩不卡的av | 欧美成人精品激情在线观看 | 四虎综合 | 中文字幕高清在线播放 | 手机在线观看av片 | 一级特黄av | av性天堂网 | 在线观看国产一级片 | 97视频网址| 色吊丝网站| 91国产高清 | 美日韩在线 | 看成人片 | 不卡视频国产 | 欧美自拍视频 | 福利视频在线播放 | 黄色片在线免费观看 | 中文字幕第11页 | 中文字幕无码日韩专区免费 | 丝袜诱惑一区 | 青青草逼| 女人性高潮视频 | 色综合激情 | 成人毛片视频免费看 | 一区二区伦理 | 亚洲特黄毛片 | 日韩小视频在线 | 免费的av| 一级欧美一级日韩片 | 国内外免费激情视频 | av资源在线看 | 国产高清久久 | 国产精选一区二区三区 | 亚洲精品v天堂中文字幕 | 谁有免费的黄色网址 | 看全黄大色黄大片美女人 | 中文字幕av专区 | 亚州男人天堂 | 每日在线更新av | 成年人网站在线免费观看 | 日韩av中文字幕在线播放 | 色就是色亚洲色图 | 肥臀熟女一区二区三区 | 欧洲日韩一区二区三区 | 免费在线看黄的网站 | 91口爆一区二区三区在线 | 神马午夜888 | 亚洲精品福利 | 丰满少妇一级 | 亚欧洲精品视频在线观看 | 五月天激情四射 | 摸丰满大乳奶水www免费 | 日本乳汁视频 | 无码任你躁久久久久久老妇 | 人妻熟女一区二区aⅴ水 | 久久久久久一级片 | 亚洲精品高清视频 | 欧美黑人一区 | 色呦呦在线 | 国产精品久久久影院 | youjizz欧美| 夜色成人网 | 污视频网站在线观看 | 国产真实乱 | 色香影视 | 中国精品毛片 | 国产白拍 | 欧洲一区二区三区四区 | 亚洲欧美视频二区 | 国产吞精囗交免费视频 | 成人黄色免费看 | 国产又粗又猛又大爽 | 欧美成人性生活视频 | 用舌头去添高潮无码视频 | 人妻互换一区二区三区四区五区 | 1级黄色大片儿 | 久操伊人 | 欧美精品激情视频 | 精品人妻一区二 | 夜久久久| av女优天堂在线观看 | 韩国女主播裸体摇奶 | 成人在线免费视频观看 | 小明天天看| 免费看91视频 | 少妇免费毛片久久久久久久久 | 亚洲韩国精品 | 四虎一国产精品一区二区影院 | 亚洲综合成人av | 国产综合区 | 88av视频| free国产hd露脸性开放 | 香蕉视频一区二区三区 | 日韩大胆人体 | 午夜国产福利在线观看 | 91精品国产高清91久久久久久 | 午夜视频日韩 | 日韩精品一区二区三区中文字幕 |