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、靜態的方法不能調用非靜態變量
關注公衆號:工控技術之家,可留言提問相關問題,有需要可發送源代碼