1. 程式人生 > >Java學習一些有意思的東西(1)

Java學習一些有意思的東西(1)

構造方法注意事項

  1.   如果我們沒有給出構造方法,系統將自動提供一個無參構造方法。
  2.     如果我們給出了構造方法,系統將不再提供預設的無參構造方法。
  3.     注意:這個時候,如果我們還想使用無參構造方法,就必須自己給出。建議永遠自己給出無參構造方法!
class Demo_2 {
    public static void main(String[] args) {
        /*
        …………………………
        …………………………
        */
    }
}


class Test_1 {
    Public Test_1() {
        System.out.println("無參的方法被呼叫");
    }

    public Test_1(int num, String str) {
        System.out.println("有參的方法被呼叫");
    }
}

static關鍵字的特點

  1.     隨著類的載入而載入
  2.     優先於物件存在
  3.     被類的所有物件共享

        * 舉例:咱們班級的學生應該共用同一個班級編號。
        * 其實這個特點也是在告訴我們什麼時候使用靜態?
            * 如果某個成員變數是被所有物件共享的,那麼它就應該定義為靜態的
        * 舉例:

  •             飲水機(用靜態修飾)
  •             水杯(不能用靜態修飾)
  •             共性用靜態,特性用非靜態 

4      可以通過類名呼叫

        * 其實它本身也可以通過物件名呼叫。
        * 推薦使用類名呼叫。
ps:如果一個類中所有的方法都是靜態的,那麼最好把這個類的構造方法private化,這樣使得該類方法只能通過類名呼叫而不能建立該類物件!!!!!

class Demo_3 {

    private Demo_3() {     //將構造方法私有,使得該類無法被new
    }

    public static void method_1() {
        /*  ...  */
    }

    public static void method_2() {
        /*  ...  */
    }
    

    /*  
    .
    .
    .  

    */

}


        * 靜態修飾的內容一般我們稱其為:與類相關的,類成員

class Demo_1 {
    public static void main(String[] args) {
        Static.print();           // 類名呼叫        
    }
}

class Static {
    public static void print() {
        System.out.println("Hello World");
    }
}

static的注意事項


    在靜態方法中是沒有this關鍵字的
        * 如何理解呢?
            * 靜態是隨著類的載入而載入,this是隨著物件的建立而存在。
            * 靜態比物件先存在
    靜態方法只能訪問靜態的成員變數和靜態的成員方法
        * 靜態方法:
            * 成員變數:只能訪問靜態變數
            * 成員方法:只能訪問靜態成員方法
        * 非靜態方法:
            * 成員變數:可以是靜態的,也可以是非靜態的
            * 成員方法:可是是靜態的成員方法,也可以是非靜態的成員方法。
        * 簡單記:
            * 靜態只能訪問靜態

Static 總結

* A:所屬不同
    * 靜態變數屬於類,所以也稱為為類變數
    * 成員變數屬於物件,所以也稱為例項變數(物件變數)

* B:記憶體中位置不同
    * 靜態變數儲存於方法區的靜態區
    * 成員變數儲存於堆記憶體

* C:記憶體出現時間不同
    * 靜態變數隨著類的載入而載入,隨著類的消失而消失
    * 成員變數隨著物件的建立而存在,隨著物件的消失而消失

* D:呼叫不同
    * 靜態變數可以通過類名呼叫,也可以通過物件呼叫
    * 成員變數只能通過對 象名呼叫