JAVA類記憶體分配

2021-07-08 13:06:01 字數 1952 閱讀 6416

1:成員變數和區域性變數的區別(理解)

(1)在類中的位置不同

成員變數:類中方法外

區域性變數:方法定義中或者方法宣告上

(2)在記憶體中的位置不同

成員變數:在堆中

區域性變數:在棧中

(3)生命週期不同

成員變數:隨著物件的建立而存在,隨著物件的消失而消失

區域性變數:隨著方法的呼叫而存在,隨著方法的呼叫完畢而消失

(4)初始化值不同

成員變數:有預設值

區域性變數:沒有預設值,必須定義,賦值,然後才能使用

6:this關鍵字(掌握)

(1)代表當前類的引用物件

記住:哪個物件呼叫方法,該方法內部的this就代表那個物件

(2)this的應用場景:

a:解決了區域性變數隱藏成員變數的問題

7:構造方法(掌握)

(3)構造方法的注意事項

a:如果我們沒寫構造方法,系統將提供乙個預設的無參構造方法

b:如果我們給出了構造方法,系統將不再提供預設構造方法

如果這個時候,我們要使用無參構造方法,就必須自己給出。

推薦:永遠手動自己給出無參構造方法。

(5)標準案例

class student

public student(string name,int age)

public string getname()

public void setname(string name)

public int getage()

public void setage(int age)

}測試:

class studentdemo

}8:**:student s = new student();做了哪些事情?(理解)

(1)把student.class檔案載入到記憶體

(2)在棧記憶體為s開闢空間

(3)在堆記憶體為學生物件申請空間

(4)給學生的成員變數進行預設初始化。null,0

(5)給學生的成員變數進行顯示初始化。林青霞,27

(6)通過構造方法給成員變數進行初始化。劉意,30

(7)物件構造完畢,把位址賦值給s變數

10:static關鍵字(理解)

(1)靜態的意思。可以修飾成員變數和成員方法。

(2)靜態的特點:

a:隨著類的載入而載入

b:優先與物件存在

c:被類的所有物件共享

這其實也是我們判斷該不該使用靜態的依據。

舉例:飲水機和水杯的問題思考

d:可以通過類名呼叫

既可以通過物件名呼叫,也可以通過類名呼叫,建議通過類名呼叫。

(3)靜態的記憶體圖

靜態的內容在方法區的靜態區

(4)靜態的注意事項;

a:在靜態方法中沒有this物件

b:靜態只能訪問靜態(**測試過)

(5)靜態變數和成員變數的區別

a:所屬不同

靜態變數:屬於類,類變數

成員變數:屬於物件,物件變數,例項變數

b:記憶體位置不同

靜態變數:方法區的靜態區

成員變數:堆記憶體

c:生命週期不同

靜態變數:靜態變數是隨著類的載入而載入,隨著類的消失而消失

成員變數:成員變數是隨著物件的建立而存在,隨著物件的消失而消失

d:呼叫不同

靜態變數:可以通過物件名呼叫,也可以通過類名呼叫

成員變數:只能通過物件名呼叫

Java記憶體分配

大多數情況,物件在新生代eden區中分配。當eden去沒有足夠記憶體空間分配時,進行minor gc。大物件是指連續占用記憶體空間的物件,比如很長的字串以及陣列。用乙個年齡計數器,每次minor gc後存活的物件移動到survior空間,並且計數器加1.年齡計數器大於一定值 預設是15 將晉公升到老...

JAVA記憶體分配規則

物件分配規則 1.物件優先分配在eden 區,如果 eden 區沒有足夠的空間時,虛擬機器執行一次 minor gc。2.大物件直接進入老年代 大物件是指需要大量連續記憶體空間的物件 這樣做的目的是避免在eden 區和兩個 survivor 區之間發生大量的記憶體拷貝 新生代採用複製演算法收集記憶體...

類物件的記憶體分配

類的大小一般是指經過例項化後類物件的大小。1真空類 長度 1 class a 2空類 長度1,同真空類。class a public a a void fun 成員函式不會影響類的大小。3簡單類,長度4 class a 4有虛函式的類 長度 4 class a 注1 虛函式表 如果基類派生類定義了虛...