java(構造方法)


構造方法

構造方法的定義

在一個類中定義的方法如果同時滿足以下三個條件,該方法稱為構造方法,具有如下:

【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來修飾。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM