無參構造與有參構造


構造方法根據有無參數分為無參構造和有參構造

無參構造語句:

[修飾符]  類名(){
}

有參構造語句:

[修飾符] 類名(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行代碼就是解決方案。

***習慣性的兩個構造都聲明一下

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM