一、每次建立對象時,都須要進行加載和建立2個操做:
spa
① 先去判斷須要的類是否已經加載,若是已經加載了,則無需再加載,若是沒有加載,則須要經過類加載器加載類信息到方法區
code
② 在堆中建立新對象對象
二、棧、堆、方法區的存儲blog
棧:對象的引用、局部變量
內存
堆:對象和全局變量(屬性)
io
方法區:類信息、屬性信息、方法信息class
三、方法的調用機制變量
每次調用方法,伴隨着「方法入棧」操做,也就是棧中爲該方法分配了一塊空間,用於保存該方法中涉及到的變量引用
每次方法調用結束,伴隨着「方法出棧」操做,也就是棧中分配的空間被釋放了方法
在類的方法調用過程當中,首先判斷方法區是否存在該方法,存在則方法入棧,調用結束後出棧。
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 }