本章目標(biāo)
- 掌握構(gòu)造方法的概念及調(diào)用時機(jī)
- 掌握構(gòu)造方法的重載
- 掌握匿名對象的使用
1何之、具體內(nèi)容
1.1、什么叫構(gòu)造方法咽筋?
只要一有對象實例化溶推,則就會調(diào)用構(gòu)造方法。
聲明一個構(gòu)造方法
class Person{
public Person(){ // 聲明構(gòu)造方法
System.out.println("一個新的Person對象產(chǎn)生奸攻。") ;
}
};
public class ConsDemo01{
public static void main(String args[]){
System.out.println("聲明對象:Person per = null ;") ;
Person per = null ; // 聲明對象時并不去調(diào)用構(gòu)造方法
System.out.println("實例化對象:per = new Person() ;") ;
per = new Person() ;//實例化對象
}
};
輸出結(jié)果:
聲明對象:Person per = null ;
實例化對象:per = new Person() ;
一個新的Person對象產(chǎn)生蒜危。
大概了解了構(gòu)造方法之后,這時候又會有一個新問題產(chǎn)生:之前在編寫類的時候并沒有定義構(gòu)造方法舞箍,為什么也可以執(zhí)行呢舰褪?
這就屬于Java的操作機(jī)制,如果一個類沒有明確的聲明一個構(gòu)造方法疏橄,則會自動生成一個無參的占拍、什么都不做的構(gòu)造方法,供用戶使用捎迫、就類似于以下形式:
class Person{
public Person(){ // 如果沒有編寫構(gòu)造方法晃酒,則會自動生成此代碼
}
};
構(gòu)造方法的目的
為類中的屬性初始化。既然是方法窄绒,則方法中肯定可以傳遞參數(shù)贝次,此時定義一個構(gòu)造,同時向里面?zhèn)鬟f參數(shù)彰导。
class Person{
private String name ;
private int age ;
public Person(String n,int a){ // 聲明構(gòu)造方法蛔翅,為類中的屬性初始化
this.setName(n) ;
this.setAge(a) ;
}
public void etName(String n){
name = n ;
}
public void etAge(int a){
if(a>0&&a<100){
age = a ;
}
}
public String getName(){
return name ;
}
public int getAge(){
return age ;
}
public void tell(){
System.out.println("姓名:" + this.getName() + "敲茄;年齡:" + this.getAge()) ;
}
};
public class ConsDemo02{
public static void main(String args[]){
System.out.println("聲明對象:Person per = null ;") ;
Person per = null ; // 聲明對象時并不去調(diào)用構(gòu)造方法
System.out.println("實例化對象:per = new Person() ;") ;
per = new Person("張三",30) ;//實例化對象
per.tell() ;
}
};
輸出結(jié)果:
聲明對象:Person per = null ;
實例化對象:per = new Person() ;
姓名:張三;年齡:30
可以發(fā)現(xiàn)構(gòu)造方法的主要目的就是為類中的屬性初始化山析。
1.2堰燎、構(gòu)造方法重載
構(gòu)造犯法與普通方法一樣,都是支持重載操作的笋轨,只要參數(shù)的類型和個數(shù)不同秆剪,就可以完成重載操作。
class Person{
private String name ;
private int age ;
public Person(){} // 聲明一個無參的構(gòu)造方法
public Person(String n){ // 聲明有一個參數(shù)的構(gòu)造方法
this.setName(n) ;
}
public Person(String n,int a){ // 聲明構(gòu)造方法爵政,為類中的屬性初始化
this.setName(n) ;
this.setAge(a) ;
}
public void setName(String n){
name = n ;
}
public void setAge(int a){
if(a>0&&a<150){
age = a ;
}
}
public String getName(){
return name ;
}
public int getAge(){
return age ;
}
public void tell(){
System.out.println("姓名:" + this.getName() + "仅讽;年齡:" + this.getAge()) ;
}
};
public class ConsDemo03{
public static void main(String args[]){
System.out.println("聲明對象:Person per = null ;") ;
System.out.println("實例化對象:per = new Person() ;") ;
Person per1 = new Person("張三",30) ;//實例化對象
Person per2 = new Person("李四") ;//實例化對象
per1.tell() ;
per2.tell() ;
}
輸出結(jié)果:
聲明對象:Person per = null ;
實例化對象:per = new Person() ;
姓名:張三;年齡:30
姓名:李四钾挟;年齡:0
1.3洁灵、匿名對象
匿名:沒有名字,在Java中掺出,如果一個對象只使用一次处渣,則就可以將其定義為匿名對象。
class Person{
private String name ;
private int age ;
public Person(String n,int a){ // 聲明構(gòu)造方法蛛砰,為類中的屬性初始化
this.setName(n) ;
this.setAge(a) ;
}
public void setName(String n){
name = n ;
}
public void setAge(int a){
if(a>0&&a<150){
age = a ;
}
}
public String getName(){
return name ;
}
public int getAge(){
return age ;
}
public void tell(){
System.out.println("姓名:" + this.getName() + "罐栈;年齡:" + this.getAge()) ;
}
};
public class NonameDemo01{
public static void main(String args[]){
new Person("張三",30).tell() ; //匿名對象
}
};
輸出結(jié)果:
姓名:張三; 年齡:30
所謂的匿名對象,就是比之前少了一個棧內(nèi)存的引用關(guān)系泥畅,缺少了引用荠诬。。
2位仁、總結(jié)
1柑贞、構(gòu)造方法的定義及使用原則
- 對象在實例化時必須調(diào)用構(gòu)造方法
- 每個類中都至少有一個構(gòu)造方法
2、匿名對象:只開辟了堆內(nèi)存的實例化對象