java靜態final

public static final double  PI = 3.141592653589793

此變量被標記爲public,因此可供各方讀取。

此變量被標記爲static,所以你不需要Math的實例。

此變量被標記爲final,因爲圓周率是不變的。

常數變量的名稱應該要都是大寫字母!

 

靜態初始化程序(static initializer)是一段在加載類時會執行的程序代碼。它會在其他程序使用該類之前就執行。所以很適合放靜態final變量的起始程序。

class Foo{

    final static int x;

    static{

        x = 42;

    }

}

靜態final變量的初始化:

1、聲明的時候:

public class Foo{

    public static final int FOO_X = 25;  // 注意這個命名慣例——應該都是大寫,並以下劃線字符分割。

}

2、在靜態初始化程序中:

public class Bar{

    public static final double BAR_DING;

    static{

        BAR_DING = (double)Math.random();  //這段程序會在類被加載時執行。

    }

}

final不止用在靜態變量上。。。。

你也可以用final關鍵字來修飾非靜態的變量,這包括了實例變量、局部變量或是方法的參數。不管哪一種,這都代表它的值不能變動。但你也可以用final來防止方法的覆蓋或創建子類。

fianl的變量代表你不能改變它的值。

final的method代表你不能覆蓋掉該method。

final的類代表你不能繼承該類(也就是創建它的子類)。

非靜態final變量

class Foof{

    fianl int size = 3; //size將無法改變

    fianl int whuffle;

    Foof(){

        whuffle  = 42;   // whuffle不能改變。

    }

    void doStuff(final int x){

        //不能改變x

    }

    void doMore{

        final int z = 7;

        //不能改變z

    }

}

final的method

class Poof{

    final void calcWhuffle(){

        //絕對不能被覆蓋過

    }

}

final的class

final class MyMostPerfectClass{

        //不能被繼承過

}

靜態(static)的方法不能調用非靜態變量

靜態的方法是在無關特定類的實例情況下執行的。因爲靜態的方法是通過類的名稱來調用,所以靜態的方法無法引用到該類的任何實例變量。在此情況下,靜態的方法也不會知道可以使用那個實例變量值。

public class Duck {
private int size;
public static void main(String[] args) {
System.out.println("Size of duck is" + size);  //哪一個Duck?此時我們無法得知堆行是否有Duck
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
}

靜態的方法也不能調用非靜態的方法

public class Duck {
private int size;
public static void main(String[] args) {
System.out.println("Size of duck is" + getSize);  //調用getSize()會需要用到size實例變量,到底要誰的size?
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}

}

靜態變量它的值對所有的實例來說都相同。

靜態變量是共享的。

同一類所有的實例共享一份靜態變量。

實例變量:每個實例一個。

靜態變量:每個類一個。

總結:

1、靜態的方法應該用類的名稱來調用,而不是用對象引用變量。

2、靜態的方法可以直接調用而不需要堆上的實例。

3、靜態的方法是一個非常實用的方法,它不需要特別的實例變量值。

4、靜態的方法不能存取非靜態的方法。

5、如果類只有靜態方法,你可以將構造函數標記爲private的以避免被初始化。

6、靜態變量爲該變量所屬類的成員所共享。靜態變量只會有一份,而不是每個實例都有自己的一份。

7、靜態方法可以存取靜態變量。

8、在Java中的常量是把變量同時標記爲static和final的。

9、final的靜態變量值必須在聲明或靜態初始化程序中賦值:

    static{

        DOG_CODE = 452;

    }

10、常量的命名慣例是全部使用大寫字母。

11、final值一旦被賦值就不能更改。

12、final的方法不能被覆蓋。

13、final的類不能被繼承。

14、靜態的方法不能調用非靜態變量

關注公衆號:工控技術之家,可留言提問相關問題,有需要可發送源代碼

 

 

 

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