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