- 類的加載時機:
1、創建對象
2、調用類的靜態成員
3、加載子類
- 類在實例化后的內存分配
1、每次創建對象時,都需要進行加載和創建2個操作:
① 先去判斷需要的類是否已經加載,如果已經加載了,則無需再加載,如果沒有加載,則需要通過類加載器加載類信息到方法區
② 在堆中創建新對象
2、棧、堆、方法區的存儲
棧:對象的引用、局部變量
堆:對象和全局變量(屬性)
方法區:類信息、屬性信息、方法信息
3、方法的調用機制
每次調用方法,伴隨着“方法入棧”操作,也就是棧中為該方法分配了一塊空間,用於保存該方法中涉及到的變量
每次方法調用結束,伴隨着“方法出棧”操作,也就是棧中分配的空間被釋放了
在類的方法調用過程中,首先判斷方法區是否存在該方法,存在則方法入棧,調用結束后出棧。
- 對象在調用類方法時的內存分配
Java中方法傳遞參數是按值傳遞:
如果是基本類型,則值 代表元素內容
如果是引用類型,則值 代表地址號
特殊情況:
在調用的方法中對引用型變量形參重新實例化,改變的是地址,則不會影響實參,即傳值進去沒用重新實例化為新地址。
class Test{ public void method(Person persion){ person=new Person(); person.name = "Zane"; System.out.println(p.name); // 輸出為Zane } } class Person{ String name; } public static void main(String[] args){ Test t = new Test(); Person p = new Person(); p.name = "Mort"; t.method(p); System.out.println(p.name); // 輸出為Mort }
- 基本類型調用方法內存分配