標籤:new int java學習 實參 記憶體 person 一個 private pre
在開發中,經常需要在建立對象的同時明確對象對的屬性值,
比如一個Person對象建立時候就應該有age和name等屬性
那麼如何做到在建立對象的同時給對象的屬性初始化值呢?
這裡介紹構造方法:
1.構造方法沒有傳回值類型,更沒有傳回值,因為它是構建對象的,對象建立完,方法就執行結束
2.構造方法名必須和類型保持一致
3.構造方法什麼時候運行呢?答:在建立對象的時候自動執行,而且只運行一次
定義樣本:
public class Person { public Person(){ System.out.println("我是一個空參數的構造方法"); }}
運行:
public class Test { public static void main(String[] args) { Person p = new Person(); }}//輸出:我是一個空參數的構造方法
構造方法是每個類的必須內容,寫或者不寫都存在
編譯器(javac)在編譯的時候會檢測是否有構造方法,如果有,執行,如果沒有,自動建立一個空參數空內容的構造方法
構造方法的賦值:
public class Person { private String name; private int age; public Person(String name,int age){ this.name = name; this.age = age; }}
public class Test { public static void main(String[] args) { Person p = new Person("張三",18); }}
構造方法記憶體分析:
1.main方法進棧運行,內容只有一行:建立對象
2.堆中開空間存入對象,並帶有兩個參數
3.兩個私人變數跟隨進入堆記憶體,並賦預設值(null,0)
4.對象把自己的地址傳給this關鍵字
5.對象調用自己的構造方法,構造方法進棧運行,並且對象把兩個參數傳入
6.構造方法用this.的方式訪問堆記憶體的對象並給成員變數賦值
7.構造方法運行結束,對象建立完成,地址傳給p
構造方法是可以重載的
樣本:
public class Person { private String name; private int age; public Person() { } public Person(String name, int age) { this.name = name; this.age = age; }}
public class Test { public static void main(String[] args) { Person p = new Person("張三", 18); Person p1 = new Person(); }}
this在構造方法之間的調用:
public class Person { private String name; private int age; public Person() { //this()是調用其他的構造方法 //this()必須寫在構造方法第一行 this("張三", 20); } public Person(String name, int age) { this.name = name; this.age = age; }}
public class Test { public static void main(String[] args) { Person p1 = new Person("張三", 18); Person p2 = new Person(); }}
記憶體原理:
1.main方法進棧運行,在堆中開空間建立對象,成員變數跟隨並賦預設值
2.對象調用自己的構造方法,調用空參數構造,進棧運行,實參傳遞
3.調用了有參數構造方法,有參構造方法進棧運行
4.賦值完成有參構造方法結束,空參構造方法結束,然後對象建立完成
5.對象地址傳給p1(p2)
Java學習筆記12(物件導向五:構造方法、this再探)