1.1 構造方法
實例化一個類的對象後,如果要爲這個對象中的屬性賦值,則必須用setter方法,那麼有沒有一種簡單的方法,可以在對象實例化時就直接把對象的值賦給屬性呢?此時,就可以通過構造方法玩車國內這樣的操作,在面向對對象程序中構造方法的主要作用是爲類中的屬性初始化。
可以回顧對象的產生格式,例如,現在要剷射給你一個類的對象,則必須使用一下格式的代碼:
類名稱 對象名稱 = new 類名稱()
可以發現,在程序中只要有“()”就表示調用了方法,那麼這個方法實際上就是表示要調用構造方法,構造方法可視爲一種特殊的方法,它的定義方式與普通方法類似,其語法如下。
class 類名稱{
訪問權限 類名稱(類型1 參數1,類型2 參數2,…){
程序語句;
… //構造方法返回值
}
}
在構造方法的聲明中:
構造方法的名稱必須與類名稱一致
構造方法的聲明處不能有任何返回值類型的聲明。
不能在構造方法中使用return返回一個值。
聲明一個構造方法:
class Person2{
public Person2(){
System.out.println("一個新的Person對象產生"); //聲明構造方法
}
}
class ConsDemo01{
public static void main(String[] args) {
System.out.println("聲明對象:Person per = null;");
Person2 per = null; //聲明對象時不調用構造
System.out.println("實例化對象:per = new Person();");
per = new Person2(); //實例化對象時調用構造
}
}
運行結果:
聲明對象:Person per = null;
實例化對象:per = new Person();
一個新的Person對象產生
程序實例化對象的過程與之前一樣的,在類中定義一個Person類的構造方法,但是從程序的運行結果可以發現,當調用new關鍵字實例化對象時纔會調用構造方法。
如果沒有聲明構造方法,則在編譯時會直接生成一個無參數的、什麼都不做的構造方法。正因爲如此,所以前面的程序中即使沒有構造方法,對象也是可以進行對象的實例化操作的。
通過構造方法爲屬性賦值:
class Person03{
private String name;
private int age;
public Person03(String name, int age){
this.setName(name);
this.setAge(age);
}
public void tell(){
System.out.println("姓名:" + getName() + ", 年齡:" + getAge());
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age > 0 && age < 150) {
this.age = age;
}
}
}
class ConsDemo02{
public static void main(String[] args) {
Person03 per = new Person03("張三",12);
per.tell();
}
}
運行結果:
姓名:張三, 年齡:12
以上程序就是直接通過構造方法進行賦值,可以發現,這樣賦值 比對象實例化之後再單獨調用setter方法更方便。
與普通方法一樣,構造方法也是可以重載的,只要每個構造方法的參數類型或參數個數不同,即可實現重載。
構造方法重載:
class Person04{
private String name;
int age;
public Person04(){
}
public Person04(String name){
this.setName(name);
}
public Person04(String name,int age){
this.setName(name);
this.setAge(age);
}
public void tell(){
System.out.println("姓名:" + getName() + ", 年齡:" + getAge());
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age > 0 && age < 150) {
this.age = age;
}
}
}
class ConsDemo07{
public static void main(String[] args) {
Person04 per = new Person04("李四");
per.tell();
}
}
運行結果:
姓名:李四, 年齡:0