構造方法
構造方法的定義
在一個類中定義的方法如果同時滿足以下三個條件,該方法稱為構造方法,具有如下:
【1】方法與類名相同。
【2】在方法名的前面沒有返回值類型的聲明。
【3】在方法中不能使用return語句返回一個值
下面是一個無參構造方法的實例
class Person{
//下面是類的構造方法
public Person(){
System.out.println("無參的構造方法被調用了。。。");
}
}
public class Example05{
public static void main(String[] args){
Person p = new Person();//實例化Person對象
}
}
有參構造方法
class Person{
int age;
//定義有參數的構造方法
public Person(int a){
age = a; //為age屬性賦值
}
public void speak(){
System.out.println("I am "+age+"years old!");
}
}
public class Example06{
public static void main(String[] args){
Person p = new Person(20); //實例化Person對象
p.speak(); //調用speak()方法
}
}
Person類中定義了有參的構造方法Perosn(int a),第13行代碼中的“new Person(20)”會在實例化對象的同時調用有參的構造方法,並傳入了參數20。在構造方法Person(int a)中將20賦值給對象的age屬性,通過運行結果可以看出,Person對象在調用speak()方法,其age屬性已經被賦值為20。
------------構造方法的重載-------------------------
與普通方法一樣,構造方法也可以重載,在一個類中可以定義多個構造方法,只要每個構造方法的參數類型或參數個數不同即可。在創建對象時,可以通過調用不同的構造方法為不同的屬性賦值。接下來通過調用不同的構造方法為不同的屬性賦值。接下為一個構造方法的重載
class Person{
String name;
int age;
//定義兩個參數的方法
public Person(String con_name,int con_age){
name = con_name; //為name屬性賦值
age = con_age; //為age屬性賦值
}
//定義一個參數的構造方法
public Person(String con_name){
name = con_name; //為name屬性賦值
}
public void speak(){
//打印name和age的值
System.out.println("大家好,我叫"+name+“,我今年”+age+“歲!”);
}
}
public class Example07{
public static void main(String[] args){
//分別創建兩個對象p1和p2
Person p1 = new Person("陳傑");
Person p2 = new Person("李芳",18);
//通過對象p1和p2調用speak()方法
p1.speak();
p2.speak();
}
}
Person類中定義了兩個構造方法,它們構成了重構。在創建p1對象和p2對象時,根據傳入參數的不同,分別調用不同的構造方法。從程序的運行結果可以看出,兩個構造方法對屬性賦值的情況是不一樣的,其中一個參數的構造方法只針對name屬性進行賦值,這時age屬性的值為默認值0
ps:在java中每個類都至少有一個構造方法,如果在一個類中沒有構造方法,系統會自動創建一個默認構造方法,這個默認的構造方法是沒有參數的,在其方法體重沒有任何代碼,即什么都不做。
//第一種寫法 class Person{ } //第二種寫法 class Person{ public Person(){ } } //以上寫法完全一樣
對於第一種寫法,類中雖然沒有聲明構造方法,但仍然可以用new Person()語句來創建Person類的實例對象。由於系統提供的構造方法往往不能滿足需求,因此,我們可以自己在類中定義構造方法,一旦為該類定義了構造方法,系統就不再提供默認的構造方法
class Person{ int age; public Person(int x){ age = x; } }
上面的Person類中定義了一個對成員變量賦初值的構造方法,該構造方法有一個參數,這時系統就不再提供默認的構造方法,接下來再編寫一個測試程序調用上面的Person類,
public class Example{ public static void main(String[] args){ Person p = new Person(); //實例化Person對象 } }
聲明構造方法時,可以使用private語句修飾符嗎?
class Person{ //定義構造方法 private Person(){ System.out.println("調用無參構造方法"); } } public class Example{ public static void main(String[] args){ Person p = new Person(); } }
運行后,程序報錯,因為private關鍵字修飾的構造方法Person()只能在Person類中被訪問,也就是說Person()構造方法是私有的,不可以被外界調用,也就無法在類的外部創建該類的實例對象,因此為了方便實例化對象,構造方法通常會使用public來修飾。
