class Cat
{
int a=5;
//構造函數
public Cat(int a){
a = a;
}
}
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的情況就不在這里說了,請到哥的其他文章里面找找~~