建構子是物件導向中的一員,建構函式可以叫做建構器,它的函式名稱與類別名稱相同,不用定義傳回值類型,也沒有特定的回傳值。建構函數是在建構創造時物件時呼叫函數,作用是可以給物件進行初始化,創建物件都必須透過建構函數初始化。一個類別中如果沒有定義過建構函數,那麼該類別會有一個預設的空參數建構函數。如果在類別中定義了指定的建構函數,那麼該類別中的預設建構函數就沒有了。
我們人出生的時候,有些人一出生之後再起名字的,但是有些人一旦出生就已經起好名字的。那我們在java裡面怎麼在物件一旦創建就賦值呢?
1.建構方法的作用:
建構方法功能:對物件進行初始化。
如圖:
2.建構子與普通函數的差異:
(1)一般函數是用來定義物件應該具備的功能。而建構函數定義的是,物件在呼叫功能之前,在建立時,應該具備的一些內容。也就是物件的初始化內容。
(2)建構子是在物件建立時由jvm呼叫, 給物件初始化。一般函數是物件建立後,當物件呼叫該功能時才會執行。
(3)普通函數可以使用物件多次調用,而建構函數在創建物件時調用。
(4)建構子的函式名稱要與類別名稱一樣,而普通的函式只要符合標識符的命名規則即可。
(5)建構子沒有傳回值型別。
3.建構子要注意的細節:
(1)當類別中沒有定義建構子時,系統會指定給該類別加上一個空參數的構造函數。這個是類別中預設的建構子。當類別中如果自訂了建構函數,這時預設的建構子就沒有了。
備註:可以透過javap指令驗證。
(2)在一個類別中可以定義多個建構函數,以進行不同的初始化。多個構造函數存在於類別中,是以重載的形式體現的。因為構造函數的名稱都相同。
class Perosn{ private int id; private String name; private int age; public Perosn(){ cry(); } public Perosn(int id, String name, int age) { this.id = id; this.name = name; this.age = age; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void cry(){ System.out.println("哇哇哇...."); } }
問題:要求每個小孩出生都會哭,這份程式碼有兩個建構函數,如果需要每個小孩出生都要哭的話,那麼就需要在不同的建構函數中都呼叫cry( )函數,但是這樣子的話造成了程式碼重複問題,那麼要怎麼解決呢?構造程式碼塊。
4.建構程式碼區塊:
建構程式碼區塊作用:給所有的物件進行統一的初始化。
class Perosn{ private int id; private String name; private int age; { cry();// 每个Person对象创建出来都会执行这里的代码 } public Perosn(){ cry(); } public Perosn(int id, String name, int age) { this.id = id; this.name = name; this.age = age; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void cry(){ System.out.println("哇哇哇...."); } }
具體作用:
1:給物件初始化。物件一建立就運行並且優先於建構函式。
2:與建構子區別
(1)建構程式碼區塊與建構函式的區別,建構程式碼區塊是給所有物件進行統一初始化, 建構子給對應的物件初始化。
(2)建構程式碼區塊的作用:它的功能是將所有建構方法中公共的資訊進行擷取。
例如孩子一出生統一哭
代碼如下:
class Boy { String name; int age; String gender; // 构造代码块,给所有对象进行初始化。 { System.out.println("哭。。。"); } Boy() { System.out.println("无参构造"); } Boy(String n, int a, String g) { name = n; age = a; gender = g; System.out.println("有参构造"); } void run() { System.out.println("跑..."); } } class Demo9 { public static void main(String[] args) { System.out.println(); Boy b = new Boy(); Boy b2 = new Boy("jack", 1, "男"); } }
php中文網,大量的免費Java入門教程,歡迎在線學習!
以上是什麼是java構造函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!