構造方法根據有無參數分為無參構造和有參構造
無參構造語句:
[修飾符] 類名(){
}
有參構造語句:
[修飾符] 類名(type a1,type a2...){
}
它倆構成了方法重載。
局部變量和成員變量的優先級問題:(如下述代碼)
public class Dog{ String name;
public Dog(String name){
name=name;
}
}
此時標記的name是無法賦值給name的,因為局部變量的優先級高於成員變量,name只會找到name
name這種情況怎么解決呢?
第一種方法:
public class Dog{ String name; public Dog(String _name){ name=_name; } }
將這個形參里的屬性名變化一下以示區分,此時name在局部變量里面找不到name就會去成員變量里面找。
第二種方法:
關鍵字 this(可用於訪問對象本身的屬性)
具體實例可跳到 this 環節。。。
有參構造中常見問題:
一般類里沒聲明構造的話,系統默認的是無參構造;
如果聲明了有參構造,但是其它類傳過來的數據類型或者屬性個數都不匹配的話,那么系統就會報錯,
此時咱們程序員就需要習慣性的兩個構造都聲明一下。
舉例說明:(下述類的有參構造只構造了名字和品種,但是沒有聲明無參構造)
1 public class Dog{ 2 3 String name; 4 int health; 5 int love; 6 String strain; 7 8 /* 9 public Dog(){ 10 System.out.println("構造方法"); 11 health = 100; 12 love = 0; 13 } 14 */ 15 16 public Dog(String _name,String _strain){ 17 name = _name;20
strain = _strain; 21 } 22 23 public void showInfo(){ 24 System.out.print("我的名字叫"+name); 25 System.out.print(",健康值"+health); 26 System.out.print(",親密度"+love); 27 System.out.println(",我是一只"+strain); 28 } 29 }
另一個類的屬性賦值:
Dog dog = new Dog(); dog.name = name; dog.health = 100; dog.love = 0; dog.strain = strain;
9-13行代碼就是解決方案。
***習慣性的兩個構造都聲明一下