產生對象的方法--構造方法

1、什麼是構造方法

1、構造方法就是類構造對象時調用的方法,用於對象的初始化工 作
2、構造方法是實例化一個類的對象時,也就是new 的時候,最先調用的方法。
構造方法的定義:
構造方法是在類中定義的,構造方法的定義格式:
方法名稱與類名稱相同無返回值類型的聲明。
對象的實例化語法:
代碼實例:

產生對象的方法--構造方法


Dog dog = new Dog(); //new Dog後面有個括號,帶括號表示調用了方法,此時調用的方法就是構造方法了

2、構造方法的重載

產生對象的方法--構造方法


如果你不寫構造方法的話,他是有默認的構造方法,裡面什麼都沒有,也沒有參數,但是如果在一個類中,寫了一個有參數的構造方法,那麼構造方法就無效了,如果你還想用默認的無參的構造方法時,你得把它寫上不然他會報沒有找到合適的構造器,..
那我可不可以在構造方法裡調用另外的構造方法呢,答案是可以的,構造方法也是方法呀肯定是可以的廢話不多說,直接上代碼

<code>import java.util.Arrays;
public class Test8{
public static void main(String[] args){
Dog dog2=new Dog("旺旺",3);
}
}
//沒有封裝之前
class Dog{
public Dog(){
System.out.println("構造方法執行了");
}
public Dog(String name){
this.name=name;
System.out.println("我是被構造方法調用的構造方法");
}
//有的同學就會說,這個和set方法很像,確實很像都是給對象傳參,
//但是set方法是對象創建之後才能調用,構造方法是對象創建時調用

public Dog(String name,int age){
this(name);//this(name); 代表的就是我調用了帶一個參數,參數類型是String的構造方法
//this.name=name;
this.age=age;
System.out.println("帶參數的構造方法執行了");
}
//在類中定義屬性(特徵)
private String name;//成員變量 ,在類中定義
private int age;//;//成員變量 ,在類中定義
public void run(int leng){//參數也是局部變量
int m=leng;//m 也是局部變量
}
}
/<code>

運行結果

產生對象的方法--構造方法


問題來了,如果你把this(name)放到System.out.println()後邊行不行呢?行不行的咱試一試不就行了,鄧爺爺說過,實踐是檢驗真理的唯一標準!

產生對象的方法--構造方法


果不其然,報錯了,對this的調用必須是構造器中的第一個語句!
也就是說,如果你想在構造方法裡使用this()調用構造方法,必須寫在改方法的第一條語句

所以呢,也就是說,構造方法調用構造方法只能調一個。並且在構造方法相互調用的時候一定要有出口!不能我調了你,你又調了我!這就成了遞歸調用,程序會死給你看的!看到這裡的能不能給我點個贊扣一個666!

3、this關鍵字

在Java基礎中,this關鍵字是一個最重要的概念。使用this關鍵字可以完成以下的操作:

<code>/***
this關鍵字
調用類中的屬性
調用類中的方法或構造方法
表示當前對象:在方法被調用的過程中,哪個對象調用可方法,在方法中的this,就表示誰
*/
public class Test8{
public static void main(String[] args){
Cat cat=new Cat();
cat.setName("喵喵");
cat.setAge(3);

}
}
class Cat{
private String name;
private int age;
public void setName(String name){//相當於 name="喵喵"
this.name=name;//this代表的是當前對象
}
public String getName(){
return name;

}
public void setAge(int age){
this.age=age;
}
public int getAge(){
return age;
}
public void eat(){
System.out.println("我是"+this.getName()+",我愛吃魚");
}

}
/<code>
  • 調用類中的屬性 也可以省略,但是因為和參數名重名了,還有就近原則所以,就不能省略了
  • 調用類中的方法或構造方法 這個eat裡的this可以省略,this也是當前對象,cat(誰調用就是誰)
  • 表示當前對象 因為cat調用了setName方法,所以this表示cat
  • 類名.this,表示誰的對象 Cat.this這個在匿名內部類中調用外部類的時候會用到!4、小結
  • 構造方法名稱與類名相同,沒有返回值聲明(包括 void)
  • 構造方法用於初始化數據(屬性)
  • 每一個類中都會有一個默認的無參的構造方法
  • 如果類中有顯示的構造方法,那麼默認構造方法將無效
  • 如果有顯示的構造方法,還想保留默認構造 方法,需要顯示的寫出來。
  • 構造方法可以有多個,但參數不一樣,稱為構造方法的重載
  • 在構造方法中調用另一個構造方法,使用this(…),該句代碼必須在第一句。
  • 構造方法之間的調用,必須要有出口。
  • 給對象初始化數據可以使用構造方法或setter方法,通常情況下,兩者都會保留。
  • 一個好的編程習慣是要保留默認的構造方法。(為了方便一些框架代碼使用反射來創建對象)
  • private Dog(){},構造方法私有化,當我們的需求是為了 保正該類只有一個對象時。 什麼時候一個類只需要一個對象?比如,工具類(沒有屬性的類,只有行為)並且該工具對象被頻繁使用。權衡只用一個對象與產生多個對象的內存使用,來確定該類是否要定義為只需要一個對象。私有化之後 你就new 不了哦!
  • this的用法


分享到:


相關文章: