Java基礎07-構造函數與this

一.構造函數-Constructor
 1.構造函數
  a.函數名和類名相同
  b.沒有返回值類型 (注意: 區別於void!)
  c.new關鍵字創建對象時自動調用
    
  注意:
   a.構造函數可以重載;
   b.可以定義與類名相同的方法.
  
 2.什麼時候使用構造函數
  當我們想在創建對象的時候就執行一段代碼, 就可以把這段代碼放在構造函數中
  例如對成員變量的賦值, 定義構造函數, 接收參數, 在執行構造函數的時候, 就可以對成員變量賦值了
  
 3.構造函數的調用
  a.當new關鍵字創建對象的時候調用
  b.在其他構造函數的第一條語句中使用this()形式調用
  
 4.自動生成構造函數
  一個類如果沒寫任何構造函數, 那麼會自動生成一個. 這個自動生成的構造函數沒有參數, 也沒有任何代碼.
  
  注意:
   如果寫了一個有參的構造函數, 就不會自動生成無參的了.
  
 5.構造函數的訪問權限
  通常情況下都是public的, 在別的類中可以創建該類對象
  某些特殊情況下我們定義了一個類, 不希望別人創建對象, 那麼就可以用private修飾構造函數.
  
二.局部變量和成員變量
 1.局部變量:
  LocalVariable, 方法中定義的變量.
  
 2.成員變量:
  Field, 類中定義的變量
  
 3.重名問題:
  局部變量可以和成員變量同名.
  但是局部變量不能和局部變量同名. 成員變量不能和成員變量同名
  
 4.訪問問題:
  在方法中直接以一個變量名形式訪問的時候, 會先找局部變量, 再找成員變量.
  如果存在局部變量, 直接訪問局部的, 如果沒有局部的才找成員的, 如果成員的也沒有, 纔會報錯.
  使用"this.變量名"形式訪問一個變量, 可以直接找到成員變量
  
三.this關鍵字
 1.構造函數中
  可以使用"this(參數)"形式調用其它構造函數
  
 2.普通函數中
  this代表調用當前函數的對象
  通常在set方法和構造函數中都會使用, 當局部變量和成員變量同名時訪問成員變量
 
 3.內部類中
  訪問外部類的成員時,使用"外部類名.this.成員名"進行訪問
  
四.函數的參數傳遞
 1.基本數據類型
  基本數據類型的數據由於是存儲在棧內存中的, 傳入函數中函數中的變量是一個新的值, 函數中改變調用處不變.
 
 2.引用數據類型
  引用數據類型的數據是存儲在堆內存中的, 變量記住的是地址, 在調用函數時函數中傳入的也是地址, 兩邊指向同一個對象, 一邊改變兩邊都變.
  
五.代碼塊
 1.什麼是代碼塊
  a.在類中用"{}"可以定義一個代碼塊
  b.代碼塊在創建對象的時候執行
  
 2.代碼塊和成員變量賦值的順序
  一個類中如果定義了成員變量, 在創建對象的時候就會初始化, 這個默認的初始化是在代碼塊之前做的. 基本數據類型等於0, 引用數據類型等於null.
  如果代碼中對成員變量賦了值, 也定義了代碼塊, 這兩部分的順序是按照定義的先後而決定的
  如果代碼塊寫在了賦值的前面, 那麼是先初始化, 再代碼塊, 再賦值
  如果代碼塊卸載了賦值的後面, 那麼是先初始化, 再賦值, 再代碼塊 
 
六.static關鍵字
 1.static用於修飾類的成員:
  靜態變量
  靜態方法
  靜態代碼塊
  靜態內部類
  
 2.靜態變量
  a.類加載後就初始化
  b.所有對象共享
  c.可以用"類名.變量名"訪問
  
七.思考題
 海灘上有一堆桃子, 有五隻猴子來分.
 第一隻猴子發現了桃子, 將桃子分成了5份, 發現多了1個, 吃了. 拿走了一份.
 第二隻猴子也來到海灘發現了桃子, 也是將桃子分成5份, 發現多了1個, 吃了. 又是拿走一份.
 五隻猴子都是這麼做的. 問: 海灘上最初有多少個桃子? 


 public static void sum()
 {
  int count=0;
  int total=1;
  while(count<=99999){
   count=total;
   for(int j=0;j<5;j++)
   {
    count=count*5+1;    
   }  
   System.out.println(count);
   total++;
  } 
 }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章