構造函數中加this和不加this的區別

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的狀況就不在這裏說了,請到哥的其餘文章裏面找找~~

相關文章
相關標籤/搜索