本文章僅為個人學習,如有錯誤,請指正。
雖然知道使用new可以建立物件,但一直不是很理解初始化和new等知識的具體。
通過8個問題和需求,了解相關知識。
了解問題和需求
1.new 的三個步驟
2.初始化是什麼意思。
3.變數宣告後和變數賦值為null或變數呼叫了new的區別。
4.欄位不是變數。
1.new的三個步驟:
1.1在棧或者堆中開闢空間,空間的大小由類決定,進行記憶體空間指向。
1.2在開闢的控制項中進行建立物件
個人理解建立物件就是,在記憶體空間中存放字段,但是字段依然沒有進行資料存放的記憶體空間指向,雖然這個物件在記憶體中佔了空間,但是沒有進行具體分配。
1.3進行初始化。
2.初始化:
初始化就是呼叫建構函式,對所有的字段進行賦值,賦值為預設值。
引用型別為null。
值型別int為0,double為0.0。
個人理解:讓字段具有預設值後,進行了空間的分配,記憶體中儲存的就是對應的實際值,null表示我沒有進行具體的使用,但是我有儲存資料的空間。
3.變數宣告後和變數賦值為null或變數呼叫了new的區別。
主要區分函式中的變數和物件中的字段的區別。
3.1變數宣告後,沒有進行賦值的含義:
宣告未賦值,會無法生成,提示『使用了未賦值的變數』。
通過reflecter可以看到,宣告變數未賦值,實際是不存在的,那麼就是說沒有進行分配記憶體。
3.2變數賦值為null
表明變數具有記憶體空間,但是記憶體中什麼也不存在。
3.3變數呼叫new
變數中存在了物件也就是存在了字段,只是字段進行了賦值,賦值為預設值。
4.欄位不是變數。
通過3和4感受一下變數和字段的區別。
變數存在函式中,欄位是類的成員。
類中函式呼叫字段或者對應的屬性,只會出現為null的情況。
類中函式宣告變數,會出現無法編譯的情況。
C new是否執行初始化
本文 c 在new時的初始化的規律可能為 對於有建構函式的類,不論有沒有括號,都用建構函式進行初始化 如果沒有建構函式,則不加括號的new只分配記憶體空間,不進行記憶體的初始化,而加了括號的new會在分配記憶體的同時初始化為0。以下 include using namespace std int m...
直接初始化和複製初始化
關於這個問題,國內外都有許多爭論,但我至今未找到滿意的答案,至於為為什麼,這就是今天要說明的。可能大家都有看過c primer,我看的是第四版,中文版,英文水平不怎麼樣。其中第13章,描述說,複製建構函式可用於 1.根據另乙個同型別的物件顯式或隱式初始化乙個物件 2.複製乙個物件,將它作為引數傳遞給...
靜態初始化和例項初始化
父類單獨的效果 當父類單獨執行時,靜態初始化塊優先執行,然後是例項初始化塊,最後才是構造器 子類單獨效果 首先執行父類的靜態初始化塊和子類的初始化塊 優先執行靜態 然後執行父類的例項初始化塊和構造器,最後執行子類的例項初始化塊和構造器 父類子類效果1 父在前子在後 先將父類的物件例項出來後,進行子類...