物件初始化的過程:
一:初始化類別
首先建立某個(gè)物件時(shí):
Dog dog = new Dog();
第一次存取某個(gè)類別的靜態(tài)方法或靜態(tài)欄位時(shí):
Dog.staticFields;
Java 解釋器就會(huì)去找類別的路徑,定位已經(jīng)編譯好的Dog.class 檔案。
二:取得類別的資源
然後 jvm 就會(huì)載入 Dog.class,產(chǎn)生一個(gè) class 物件。這時(shí)候如果有靜態(tài)的方法或變數(shù),靜態(tài)初始化動(dòng)作都會(huì)被執(zhí)行。這時(shí)候要注意啦,靜態(tài)初始化在程式運(yùn)行過程中只會(huì)在 Class 物件首次載入的時(shí)候運(yùn)行一次。這些資源都會(huì)放在 jvm 的方法區(qū)。
方法區(qū)又叫靜態(tài)區(qū),跟堆一樣,被所有的執(zhí)行緒共用。
方法區(qū)包含的都是在整個(gè)程式中永遠(yuǎn)唯一的元素,包含所有的 class 和 static 變數(shù)。
三:初始化物件?Dog dog = new Dog()
1、第一次建立Dog 物件先執(zhí)行上面的一二步
2、在堆上為Dog 物件分配足夠的儲(chǔ)存空間,所有屬性和方法都被設(shè)定成預(yù)設(shè)值(數(shù)字為0,字元為null,布林為false,而所有參考都設(shè)定成null )
3、執(zhí)行建構(gòu)子檢查是否有父類,如果有父類會(huì)先呼叫父類的建構(gòu)函數(shù),這裡假設(shè)Dog 沒有父類,執(zhí)行預(yù)設(shè)值欄位的賦值即方法的初始化動(dòng)作。
4、執(zhí)行建構(gòu)子。
推薦教學(xué):java開發(fā)入門
以上是Java中的物件是如何初始化的的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級(jí)程式碼編輯軟體(SublimeText3)

熱門話題

使用fmt.Scanf可讀取格式化輸入,適合簡(jiǎn)單結(jié)構(gòu)化數(shù)據(jù),但字符串遇空格截止;2.推薦使用bufio.Scanner逐行讀取,支持多行輸入、EOF檢測(cè)和管道輸入,並可處理掃描錯(cuò)誤;3.使用io.ReadAll(os.Stdin)一次性讀取全部輸入,適用於處理大塊數(shù)據(jù)或文件流;4.實(shí)時(shí)按鍵響應(yīng)需第三方庫如golang.org/x/term,常規(guī)場(chǎng)景使用bufio已足夠;實(shí)際建議:交互式簡(jiǎn)單輸入用fmt.Scan,行輸入或管道用bufio.Scanner,大塊數(shù)據(jù)用io.ReadAll,且始終處理

Optional是Java8引入的用於更安全地處理可能為空值的容器類,其核心目的是將“值缺失”顯式化並減少NullPointerException風(fēng)險(xiǎn)。 1.使用Optional.empty()創(chuàng)建空實(shí)例,Optional.of(value)包裝非空值,Optional.ofNullable(value)安全包裝可能為null的值。 2.避免直接調(diào)用isPresent()與get()組合,應(yīng)優(yōu)先使用orElse()提供默認(rèn)值,orElseGet()實(shí)現(xiàn)延遲計(jì)算,默認(rèn)值開銷大時(shí)推薦此方法,orElse

推薦使用in關(guān)鍵字檢查字典中是否存在某個(gè)鍵,因?yàn)樗?jiǎn)潔、高效且可讀性強(qiáng);2.不推薦使用get()方法判斷鍵是否存在,因?yàn)楫?dāng)鍵存在但值為None時(shí)會(huì)誤判;3.可以使用keys()方法,但多餘,因in默認(rèn)即檢查鍵;4.在需要取值且預(yù)期鍵通常存在時(shí),可用try-except捕獲KeyError異常。最推薦的做法是使用in關(guān)鍵字,既安全又高效,且不受值為None的影響,適合絕大多數(shù)場(chǎng)景。

SQLServer本身不支持無服務(wù)器架構(gòu),但云平臺(tái)提供了類似方案。 1.Azure的ServerlessSQL池可直接查詢DataLake文件,按資源消耗計(jì)費(fèi);2.AzureFunctions結(jié)合CosmosDB或BlobStorage可實(shí)現(xiàn)輕量SQL處理;3.AWSAthena支持S3數(shù)據(jù)的標(biāo)準(zhǔn)SQL查詢,按掃描數(shù)據(jù)量計(jì)費(fèi);4.GoogleBigQuery通過FederatedQuery接近Serverless理念;5.若必須使用SQLServer功能,可選AzureSQLDatabase的無服

InstallJDK,setJAVA_HOME,installJavaExtensionPackinVSCode,createoropenaMaven/Gradleproject,ensureproperprojectstructure,andusebuilt-inrun/debugfeatures;1.InstallJDKandverifywithjava-versionandjavac-version,2.InstallMavenorGradleoptionally,3.SetJAVA_HO

useconnectionpoolingwithhikaricptoredatabaseconnectionsand andReduceOverhead.2.UsepreparedStatementTopReventsqlineventSqlinexptitionandAndimpRovequeryPerformance.3.fetchonlyrequireddatabyselectingspececlyselectingspeccecificcolumncolumnsandapplyingfiltersandpagagination.4.usisbatchopopererorsorsorsorsorsor.4.usebatchopoperorsorsor.4.usebatchopopoperorsorsor

掌握SpringCloud集成模式對(duì)構(gòu)建現(xiàn)代分佈式系統(tǒng)至關(guān)重要。 1.服務(wù)註冊(cè)與發(fā)現(xiàn):通過Eureka或SpringCloudKubernetes實(shí)現(xiàn)服務(wù)自動(dòng)註冊(cè)與發(fā)現(xiàn),配合Ribbon或LoadBalancer進(jìn)行負(fù)載均衡;2.配置中心:使用SpringCloudConfig集中管理多環(huán)境配置,支持動(dòng)態(tài)加載與加密處理;3.API網(wǎng)關(guān):借助SpringCloudGateway統(tǒng)一入口、路由控制及權(quán)限管理,並支持限流與日誌記錄;4.分佈式鏈路追蹤:結(jié)合Sleuth與Zipkin實(shí)現(xiàn)請(qǐng)求全流程可視化追

系統(tǒng)調(diào)用是用戶程序通過內(nèi)核接口請(qǐng)求特權(quán)操作的機(jī)制,其工作流程為:1.用戶程序調(diào)用封裝函數(shù);2.設(shè)置系統(tǒng)調(diào)用號(hào)和參數(shù)到寄存器;3.執(zhí)行syscall指令陷入內(nèi)核態(tài);4.內(nèi)核查表執(zhí)行對(duì)應(yīng)處理函數(shù);5.執(zhí)行完畢後返回用戶態(tài)??赏ㄟ^strace工具跟蹤、syscall()函數(shù)直接調(diào)用或查閱unistd.h頭文件查看調(diào)用號(hào),需注意系統(tǒng)調(diào)用與庫函數(shù)的區(qū)別在於是否進(jìn)入內(nèi)核態(tài),且頻繁調(diào)用會(huì)影響性能,應(yīng)通過合併I/O、使用mmap和epoll等方法優(yōu)化,理解系統(tǒng)調(diào)用有助於掌握Linux底層運(yùn)行機(jī)制。
