相信有很多初學(xué)Java的小伙伴在學(xué)習(xí)面對(duì)對(duì)象的時(shí)候,一個(gè)類里面既有構(gòu)造函數(shù),又有普通函數(shù),因?yàn)樗麄儍蓚€(gè)就像雙胞胎兄弟,所以區(qū)分得不是很明白。本文將為您介紹Java中的構(gòu)造器,重載方法,以及構(gòu)造函數(shù)和普通函數(shù)之間的區(qū)別。
構(gòu)造器
在學(xué)習(xí)之前,我們首先要了解什么是構(gòu)造器?構(gòu)造器能用來做什么?
構(gòu)造器:也就是我們前文提到的構(gòu)造函數(shù),也可以叫做構(gòu)造方法,是 Java 中一種特殊的函數(shù)。
作用:構(gòu)造器一般是用來初始化成員屬性和成員方法。當(dāng)我們使用?new
?關(guān)鍵詞美創(chuàng)建一個(gè)新的對(duì)象,那么構(gòu)造器就會(huì)被調(diào)用一次。
構(gòu)造器的特點(diǎn)
- 函數(shù)名必須和類名相同。
- 不需要定義返回值類型。
- 每個(gè)對(duì)象都至少有一個(gè)構(gòu)造函數(shù),即使沒有創(chuàng)建構(gòu)造器,系統(tǒng)也會(huì)默認(rèn)添加一個(gè)無參構(gòu)造器。
- 如果有自定義的構(gòu)造器,那么系統(tǒng)就不會(huì)添加。
因?yàn)闃?gòu)造函數(shù)的名稱只能和類名相同,這也就是說明了如果要自定義多個(gè)構(gòu)造函數(shù)的話,那么必然就會(huì)有重名的結(jié)果。在這里,就要先介紹Java中另外一個(gè)很重要的知識(shí)點(diǎn)——重載。
重載
定義:在同一個(gè)類當(dāng)中,方法可以有相同的方法名,但是所給的參數(shù)不一樣,那么這就叫做方法重載(Method Overloading)。。
特點(diǎn):和返回值類型無關(guān),只和參數(shù)列表有關(guān)系。(參數(shù)個(gè)數(shù)、參數(shù)類型、參數(shù)順序)。
那么方法重載后,會(huì)不會(huì)影響前面寫過的方法函數(shù)?
答案是不會(huì)的!方法重載并不會(huì)對(duì)前面的方法函數(shù)進(jìn)行覆蓋。
同樣的方法名,不同的方法函數(shù)。
構(gòu)造器的示例用法
無參構(gòu)造器
創(chuàng)建一個(gè)?People
?對(duì)象,定義一個(gè)無參構(gòu)造器(為了更直觀看到是否調(diào)用了構(gòu)造器,在其中添加了一個(gè)打印。)
public class People {
String name;
Integer age;
String gender;
public People() {
System.out.println("已經(jīng)調(diào)用了這個(gè)無參構(gòu)造器。");
}
}
用?new
?關(guān)鍵詞創(chuàng)建一個(gè)新對(duì)象
public class Demo {
public static void main(String[] args) {
People p1 = new People();
}
}
輸出結(jié)果
有參構(gòu)造器
有參構(gòu)造器也就是比無參構(gòu)造器多一些參數(shù)類型,參數(shù)值。
寫法
public 類名 (參數(shù)類型1 參數(shù)值1, 參數(shù)類型2 參數(shù)值2...){}
自定義一個(gè)有參構(gòu)造器
public People(String name, Integer age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
創(chuàng)建一個(gè)名為?p2
?的對(duì)象,來調(diào)用自定義的有參構(gòu)造器
People p2 = new People("Jack", 15, "男");
System.out.println(p2.name+"是一個(gè)"+p2.age+"歲的"+p2.gender+"生.");
輸出結(jié)果
看到這里,對(duì)構(gòu)造器有了一個(gè)大概的了解了。接下來,我們說說構(gòu)造函數(shù)和普通函數(shù)的區(qū)別。
構(gòu)造函數(shù)和普通函數(shù)的區(qū)別
構(gòu)造函數(shù)和普通函數(shù)長得非常相似,就像是雙胞胎一樣。但即便是雙胞胎,他們之前也會(huì)存在一些的區(qū)別的。
- 普通函數(shù)的函數(shù)名可以根據(jù)個(gè)人愛好自定義的;構(gòu)造函數(shù)的函數(shù)名只能是和類名一樣。
- 普通函數(shù)可以用void來修飾,也可以有返回值;構(gòu)造函數(shù)則既不能用void修飾,也沒有返回值。
- 一般情況下,建議的是普通函數(shù)使用小駝峰式命名法,即首字母小寫;構(gòu)造函數(shù)和類名首字母要大寫。
- 普通函數(shù)是可以直接通過?
函數(shù)名()
?來直接調(diào)用;構(gòu)造函數(shù)則是在new
?關(guān)鍵詞創(chuàng)建對(duì)象時(shí)才調(diào)用。