在現實生活中,很多事物一出現,就天生具有某些屬性和行爲。比如人一出生,就有年齡、身高、體重、就會哭;汽車一出產,就有顏色、有外觀、可以運行等。這些,我們就可以將這些天然的屬性和行爲定義在構造函數中,當new實例化對象時,也就具有這些屬性和方法了,沒必要再去重新定義了,從而加快了編程效率。
構造函數作用:一般用來初始化成員屬性和成員方法的,即new對象產生後,就調用了對象了屬性和方法。
構造函數與普通函數的區別:
(1)一般函數是用於定義對象應該具備的功能。而構造函數定義的是,對象在調用功能之前,在建立時,應該具備的一些內容。也就是對象的初始化內容。
(2) 構造函數是在對象建立時由 jvm 調用, 給對象初始化。一般函數是對象建立後,當對象調用該功能時纔會執行。
(3) 普通函數可以使用對象多次調用,構造函數就在創建對象時調用。
(4) 構造函數的函數名要與類名一樣,而普通的函數只要符合標識符的命名規則即可。
(5) 構造函數沒有返回值類型。
作用:給對象進行初始化。
如下圖所示:
public class Person {
String name; // 姓名
int age; // 年齡
// 全參構造方法
Person(String name,int age){
this.name = name; // 給對象賦予name值
this.age = age; // 給對象賦予age值
}
// 無參構造方法
Person(){
}
public static void main(String[] args) {
Person p = new Person("張三",1);
/*
根據創建對象的實參個數,jvm回去尋找合適的構造方法,
兩個實參所有會調用含有兩個參數的構造方法.Person(String name,int age)
*/
System.out.println("姓名: " + p.name + " 年齡: " + p.age); // name = 張三, age = 1;
//這個對象創建出來的時候已經有了自己的姓名和年齡
}
注意:
1、當類中沒有定義構造函數時,系統會指定給該類加上一個空參數的構造函數。這個是類中默認的構造函數。當類中如果自定義了構造函數,這時默認的構造函數就沒有了。
2、在一個類中可以定義多個構造函數,以進行不同的初始化。多個構造函數存在於類中,是以重載的形式體現的。因爲構造函數的名稱都相同。
3、創建對象時,構造函數已經被調用並執行。
什麼時候定義構造函數呢?
在描述事物時,該事物已存在就具備的一些內容,這些內容都定義在構造函數中。
public class Person {
// 定義一個Person類的構造函數
public Person() {// 構造函數 而且是空參數的
System.out.println("無參構造函數");
}
public static void main(String[] args) {
Person person = new Person();
}
}
輸出結果爲:無參構造函數
構造函數:構建創造對象時調用的函數
作用:可以給對象進行初始化
創建對象都必須要通過構造函數初始化。一個類中如果沒有定義過構造函數,那麼該類中會有一個默認的空參數構造函數。
如果在類中定義了指定的構造函數,那麼類中的默認構造函數就沒有了。一句話:有就用你的,沒,哥幫你弄一個空的。
比如:
Class Demo{
}
編譯能通過
其實裏面默認含有構造函數初始化
Class Demo{
Demo( ){ }
}
有參構造函數如下:
public class Person {
// 定義一個Person類的構造函數
public Person() {// 構造函數 而且是空參數的
System.out.println("無參構造函數");
}
public Person(String message) {// 構造函數 而且是有參數的
System.out.println("有參構造函數" + message);
}
}
public static void main(String[] args) {
Person person = new Person();
Person message=new Person("已被調用");
}
}
輸出結果爲:
無參構造函數
有參構造函數已被調用
. 構造代碼塊:
{
//初始化內容
}
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("有參構造");
}
}
class Demo9 {
public static void main(String[] args) {
Boy b = new Boy();
Boy b2 = new Boy("jack", 1, "男");
//輸出結果爲:
/*
哭。。。
無參構造
哭。。。
有參構造
*/
}
}
具體作用:
1:給所有對象進行統一初始化。對象一建立就運行並且優先於構造函數。
2:與構造函數區別
1:構造代碼塊和構造函數的區別,構造代碼塊是給所有對象進行統一初始化, 構造函數給對應的對象初始化。
2:構造代碼塊的作用:它的作用就是將所有構造方法中公共的信息進行抽取。
參考鏈接: