class Cat 函數
{this
int a=5;spa
//構造函數對象
public Cat(int a){作用域
a = a;class
} 變量
}原理
Cat c=new Cat(4);構造函數
這種狀況下實際上是把c對象的變量a的值都是初始化成了5,並無像咱們想的同樣初始化爲4。標籤
由於這個時候構造函數裏面的a他不知道本身是這個類的對象a仍是構造函數的參數a,可是由於類的對象a的做用域比較大,因此這個時候實質上是類的變量a把本身的值給了本身,也就是c把本身a這個變量初始化成了5,參數在調用構造函數的時候傳了過來,可是沒什麼卵用··········
class Cat
{
int a=5;
//構造函數
public Cat(int b){
a = b;
}
}
Cat c=new Cat(4);
這種狀況下c對象的變量a的值就是咱們想要的4了。
由於構造函數中參數名是b,類的變量名是a,這時c對象在調用構造函數初始化本身的時候,構造函數就可以很好地區分哪一個是參數,哪一個是變量,這個時候構造函數拿到傳過來的參數4就有卵用了,由於這時候就知道把參數值賦值給變量了,c對象中a變量的值就成了4
class Cat
{
int a=5;
//構造函數
public Cat(int a){
this.a = a;
}
}
Cat c=new Cat(4);
這種狀況下c對象的變量a的值也是咱們想要的4。
爲啥子嘞,是這個樣子滴。其實原理仍是和上面那個同樣,就是要把參數和類的變量區分開,這樣才能夠進行正確的賦值。否則長的像個雙胞胎同樣,連你媽也不認識誰是誰,你叫咱們可愛的函數怎麼去區分嘛。
理解this的同窗相信我不說大家也是懂得;不理解this用法的同窗暫時能夠這樣理解,原本是兩個同樣的東西,可愛的函數分不清,可是上面貼了個標籤說是個人,這樣函數就能夠分清了,這樣就能夠正確的賦值了。
注:關於this的狀況就不在這裏說了,請到哥的其餘文章裏面找找~~