第十八天 構造方法

 

1.1 構造方法

實例化一個類的對象後,如果要爲這個對象中的屬性賦值,則必須用setter方法,那麼有沒有一種簡單的方法,可以在對象實例化時就直接把對象的值賦給屬性呢?此時,就可以通過構造方法玩車國內這樣的操作,在面向對對象程序中構造方法的主要作用是爲類中的屬性初始化。

可以回顧對象的產生格式,例如,現在要剷射給你一個類的對象,則必須使用一下格式的代碼:

類名稱 對象名稱 = new 類名稱()

可以發現,在程序中只要有“()”就表示調用了方法,那麼這個方法實際上就是表示要調用構造方法,構造方法可視爲一種特殊的方法,它的定義方式與普通方法類似,其語法如下。

class 類名稱{

訪問權限 類名稱(類型參數1,類型參數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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章