建構函式、this、static

lambdaλ發表於2017-09-20

建構函式

  • 作用:
    給對應的物件進行初始化
  • 格式;
修飾符  函式名(形式引數列表){
      初始化的語句;
}
  • 注意的細節:
  1. 沒有返回值型別
  2. 建構函式的函式名必須要與類名一致
  3. 建構函式並不是由我們手動呼叫的,建構函式是在建立對應物件的時候由jvm主動呼叫的(每建立一個物件就會呼叫一次建構函式)
  4. 如果一個類沒有顯示新增一個建構函式,那麼java編譯器會為該類新增一個無參的建構函式
  5. 如果一個類已經顯示新增一個建構函式,那麼java編譯器就不會再為該類新增一個無參的建構函式
  6. 建構函式是可以以函式過載的形式存在多個的

構造程式碼塊

給所有的物件進行統一的初始化

  • 格式:
{
        初始化語句;
}

型別:

  • 構造程式碼塊
    • 位於成員位置上
  • 區域性程式碼塊
    • 位於方法之內(幾乎沒有人使用)
  • 靜態程式碼塊

注意細節

  • 建構函式的程式碼是位於成員變數的顯示初始化語句、構造程式碼塊語句之後執行的
  • 成員變數的顯示初始化語句與構造程式碼塊的語句的先後執行順序是按照當前程式碼的順序執行的
  • 成員變數的初始化語句和構造程式碼塊的程式碼其實是在建構函式中完成的

this關鍵字

  • this關鍵字代表的是所屬函式的呼叫著物件
    作用:
  1. 一個類存在著同名的成員變數與區域性變數時,在方法內部預設是訪問區域性變數的資料,我們可以通過this關鍵字來訪問成員變數
  2. this關鍵字可以在建構函式中呼叫其他的建構函式初始化物件使用。
    this關鍵字注意的細節:
    1.如果在一個函式中訪問一個成員變數,而且沒有存在同名的區域性變數時,那麼Java編譯器會預設在變數的前面加this關鍵字
    2.this關鍵字呼叫其他建構函式時,this語句必須位於建構函式中的第一個語句
    3.this關鍵字呼叫建構函式的時候不能出現相互呼叫的情況,因為是一個死迴圈的呼叫方式

static(靜態):修飾符

靜態資料是優先與物件而存在的

成員變數使用static修飾,那麼該資料會進行方法區記憶體中,而且只會存在一份資料

使用方法:

  • 只需要使用static關鍵字修飾該成員變數就可以將資料移動到資料共享區
  • static修飾成員變數:
    • 如果一個資料需要被所有物件共享使用的時候,那麼即可使用static修飾成員變數

       String name;//非靜態成員變數
       static String county = “中國”;//靜態成員變數
      

訪問方式:

  1. 可以使用物件進行訪問。格式:物件.靜態屬性名
  2. 可以使用類名進行訪問, 格式:類名.屬性名
    推薦使用:類名進行訪問
    注意細節
    1.靜態的成員變數可以使用類名或者是物件進行訪問
    2.非靜態的成員變數只能使用物件進行訪問,不能使用類名進行訪問
    3.千萬不能為了方便訪問而使用static修飾一個成員變數,只有這個成員變數需要被共享的時候才使用static修飾
  • static修飾成員函式:
    訪問方式:
  1. 可以使用物件進行訪問。格式:類名.函式名();
  2. 可以使用類名進行訪問。格式:類名.函式名();
    注意細節
    1.非靜態的函式只能使用物件呼叫,不能使用類名呼叫
    2.靜態函式可以直接訪問靜態的成員(函式與成員變數),但是不能直接訪問非靜態的成員
    原因:靜態函式可以使用類名呼叫,而這時候物件可能還沒有存在記憶體中,所以非靜態資料也就不在記憶體中,所以不能訪問。
    3..非靜態函式可以直接訪問靜態以及非靜態成員。
    原因:非靜態函式必須要由物件呼叫,如果物件存在了靜態資料以及非靜態資料早就存在記憶體中了。
    4.靜態函式不能出現this以及super關鍵字
    原因:因為靜態函式可以使用類名直接呼叫,而這時候可能還沒有物件存在,this又代表當前物件。

非靜態的成員變數與靜態的成員變數的區別

  1. 數量上的區別:
    1.(n份)非靜態成員變數是在每個物件中都維護一份資料
    2.(1份)靜態成員變數只會在方法中維護一份資料
  2. 呼叫(訪問方式)的區別:
    1.非靜態的成員變數只能使用物件進行訪問
    2.靜態的成員可以使用物件、類名進行訪問
  3. 儲存位置上的區別:
    1.非靜態成員變數是儲存在堆記憶體中
    2.靜態成員變數是儲存在方法中
  4. 生命週期的區別:
    1.非靜態成員變數是隨著物件的建立而存在,隨著物件的消失而消失的。
    2.靜態成員變數是隨著類檔案的載入而而存在,隨著類檔案(位元組碼檔案)的消失而消失的
  5. 作用上的區別:
    1.非靜態成員變數的作用是用於描述一類事物的屬性
    2.靜態成員變數的作用是提供一個共享資料給所有物件使用的
  • 什麼時候使用static修飾成員變數
    當成員變數需要共享的時候
  • 什麼時候使用static修飾一個函式呢?
    如果一個函式沒有直接訪問非靜態成員,那麼即可使用static修飾該函式(常用於工具類的方法:Arrays。。。)


相關文章