物件導向 值與引用傳參 變數與堆疊

2022-01-16 06:01:37 字數 1830 閱讀 8861

學習內容

1.物件導向與面向過程

面向過程:

根據需求,分析解決該需求所需要的步驟,利用函式(方法)將這些步驟一一實現,使用時在進行依次呼叫。

物件導向:

把需求分解成乙個個的功能,利用函式(方法)將這些功能一一實現,使用時呼叫功能。

在物件導向的思維中,不考慮每個功能具體需要哪些步驟、是怎麼實現的,簡單來說就是你辦事我放心。

例:如何把大象裝入冰箱?

物件導向:1.開啟冰箱門(方法)2.把大象裝進冰箱(功能)3.關閉冰箱門(功能)

整個過程需要三個方法:開啟,裝載,關閉,乙個物件:大象。

2.物件記憶體**

3.類與物件

類指的是對某一類物件的抽象解釋,例如動物、人類,而物件則是類具體化的體現,例如貓、中國人,創造物件的過程就是例項化類。

class

human

}

4.基本型別與引用型別傳參

基本型別:

a的值被複製乙份傳入方法change,方法內改變a的值,只在方法內生效,方法執行完畢,彈棧,主方法內的a不改變。

引用型別:

引用型別傳參是把其實體地址傳入方法,此時會有兩個引用指向該實體地址,即主方法裡的引數a,change方法內的形參a,此時方法內改變a[0],

則直接會對堆內的資料進行改變,所以主方法內的a[0]也隨之改變。

5.成員變數與區域性變數

區別一:定義的位置不同

定義在類體中、方法外的變數是成員變數

定義在方法中或者{}語句(**塊)裡面的變數是區域性變數

區別二:在記憶體中的位置不同

成員變數儲存在對記憶體的物件中

區域性變數儲存在棧記憶體的方法中

區別三:生命週期不同

成員變數隨著物件的出現而出現在堆中,隨著物件的消失而從堆中消失

物件被例項化,成員變數(除靜態變數外,靜態變數不論有沒有例項化物件都會被初始化)就會被初始化!

區域性變數隨著方法的執行而出現在棧中,隨著方法的彈棧而消失

區別四:初始化不同

成員變數因為在堆記憶體中,有預設的初始化值,可直接使用其預設值。

區域性變數在棧記憶體中,沒有預設的初始化值,必須手動的給其賦值才可以使用。

棧:存放基本型別的變數資料和物件的引用,但物件本身不存放在棧中,而是存放在堆(new 出來的物件)或者常量池中(物件可能在常量池裡)(字串常量物件存放在常量池中。)

堆:存放所有new出來的物件。

靜態域:存放靜態成員(static定義的)

常量池:存放字串常量和基本型別常量(public static final)。

變數的傳值與傳引用

傳值 b a 將a變數的值傳值給b變數。調式傳值 a 100 b 200 b a echo b 100 a 300 echo b 100 b 300 echo a 300 unset a echo a echo b 傳引用 b a 將a變數的位址傳遞給b變數。調式傳引用 a 100 b 200 b ...

變數的傳值與引用

傳值 b a 將a變數的值傳值給b變數。調式傳值 a 100 b 200 b a echo b 100 a 300 echo b 100 b 300 echo a 300 unset a echo a echo b 傳引用 katex parse error expected eof got at ...

類物件的「傳值」與「傳引用」

傳值 就是通過值來傳遞乙個物件,這個過程需要拷貝建構函式來進行。而 傳引用 實質上就是一種指標傳遞。兩種傳遞方式在使用上存在效率問題和 切割 問題。1 效率 而前所述,傳值 需要呼叫拷貝建構函式。例如 class ctest ctest const ctest ref ctest ctest fun...