構(gòu)造函數(shù)的最大作用就是創(chuàng)建對(duì)象時(shí)完成初始化,當(dāng)我們?cè)趎ew一個(gè)對(duì)象并傳入?yún)?shù)的時(shí)候,會(huì)自動(dòng)調(diào)用構(gòu)造函數(shù)并完成參數(shù)的初始化。如下:
1 public class Test { 2 private String name; 3 //有參數(shù)的構(gòu)造函數(shù) 4 public Test(String name) { 5 this.name = name; 6 } 7 8 public static void main(String[] args) { 9 //new一個(gè)對(duì)象,傳參,調(diào)用構(gòu)造函數(shù) 10 Test test=new Test("VipMao"); 11 System.out.println(test.name); 12 } 13 }
運(yùn)行結(jié)果 VipMao
這就說明在我們創(chuàng)建Test對(duì)象的時(shí)候,會(huì)自動(dòng)調(diào)用構(gòu)造函數(shù)完成初始化,這時(shí)程序中的name屬性就成了VipMao。
上面說到構(gòu)造函數(shù)是為了在new對(duì)象傳入?yún)?shù)后完成屬性的初始化,也許有些人不解,為什么我程序中不寫構(gòu)造函數(shù)依然可以完成初始化。
1.如果你不寫構(gòu)造函數(shù),程序會(huì)自動(dòng)給你加上一個(gè)無參數(shù)無操作的構(gòu)造函數(shù)(當(dāng)然你看不見)。
2.如果你寫了構(gòu)造函數(shù),則自定義構(gòu)造函數(shù)會(huì)覆蓋無參數(shù)構(gòu)造函數(shù)。
3.如果你寫的構(gòu)造函數(shù)中不存在無參數(shù)的構(gòu)造函數(shù),將不能以 new XXX("");這樣傳參的方式生成該類的對(duì)象(當(dāng)然你也可以生成對(duì)象后通過他們的set、get方法進(jìn)行賦值。)
比如將上面的程序改成以下:
1 import java.util.ArrayList; 2 import java.util.Iterator; 3 import java.util.List; 4 5 public class Test { 6 private String name; 7 //不提供構(gòu)造函數(shù) 8 public static void main(String[] args) { 9 //new一個(gè)對(duì)象,傳參,調(diào)用構(gòu)造函數(shù) 10 Test test=new Test("VipMao"); 11 System.out.println(test.name); 12 } 13 }
在創(chuàng)建對(duì)象并賦值的時(shí)候,程序就會(huì)報(bào)錯(cuò):
The constructor Test(String) is undefined,構(gòu)造函數(shù)是沒有定義的。
也就是說如果程序員沒有為JAVA類提供任何構(gòu)造器,則系統(tǒng)會(huì)為這個(gè)類提供一個(gè)無參數(shù)的構(gòu)造器,這個(gè)構(gòu)造器的執(zhí)行體為空,不做任何事情。無論如何,JAVA類至少包含一個(gè)構(gòu)造器,如果你提供了多個(gè)構(gòu)造函數(shù)(參數(shù)不同),則程序會(huì)根據(jù)你傳入?yún)?shù)的不同調(diào)用不同的構(gòu)造函數(shù)。
轉(zhuǎn)載于: https://blog.csdn.net/VipMao/article/details/51530954
浙公網(wǎng)安備 33010602011771號(hào)