首頁 >Java >java教程 >Java中static和final一起使用實現什麼效果

Java中static和final一起使用實現什麼效果

伊谢尔伦
伊谢尔伦原創
2017-04-29 13:45:173423瀏覽

 static final用來修飾成員變數和成員方法,可簡單理解為「全域常數」!

  對於變量,表示一旦給值就不可修改,並且透過類別名稱可以存取。

  對於方法,表示不可覆寫,並且可以透過類別名稱直接存取。

  有時你希望定義一個類別成員,使它的使用完全獨立於該類別的任何物件。通常情況下,類別成員必須透過它的類別的物件來訪問,但是可以建立這樣一個成員,它能夠被它自己使用,而不必引用特定的實例。在成員的聲明前面加上關鍵字static(靜態的)就能創造這樣的成員。如果一個成員被宣告為static,它就能夠在它的類別的任何物件創建之前被訪問,而不必引用任何物件。你可以將方法和變數都宣告為static。 static 成員最常見的例子是main( ) 。因為在程式開始執行時必須呼叫main() ,所以它被宣告為static。

  宣告為static的變數實質上就是全域變數。當宣告一個物件時,並不會產生static變數的拷貝,而是該類別所有的實例變數共用同一個static變數。宣告為static的方法有以下幾個限制:

· 它們只能呼叫其他的static 方法。

· 它們只能存取static資料。

· 它們不能以任何方式引用this 或super(關鍵字super 與繼承有關,在下一章中描述)。

  如果你需要透過計算來初始化你的static變量,你可以宣告一個static區塊,Static 區塊只在該類別載入時執行一次。下面的範例顯示的類別有一個static方法,一些static變量,以及一個static 初始化區塊:

class UseStatic {   
static int a = 3;   
static int b;   
 
static void meth(int x) {   
System.out.println("x = " + x);   
System.out.println("a = " + a);   
System.out.println("b = " + b);   
}   
 
static {   
System.out.println("Static block initialized.");   
b = a * 4;   
}   
 
public static void main(String args[]) {   
meth(42);   
}   
}

 一旦UseStatic 類別被裝載,所有的static語句被運行。首先,a被設定為3,接著static 塊執行(列印一則訊息),最後,b被初始化為a*4 或12。然後呼叫main(),main() 呼叫meth() ,把值42傳給x。 3個println ( ) 語句引用兩個static變數a和b,以及局部變數x 。

  注意:在一個static 方法中引用任何實例變數都是非法的。

  下面是該程式的輸出:

Static block initialized.
x = 42
a = 3
b = 12

  在定義它們的類別的外面,static 方法和變數能獨立於任何物件而被使用。這樣,你只要在類別的名字後面加點號運算子即可。例如,如果你希望從類別外面呼叫一個static方法,你可以使用下面通用的格式:

classname.method( )   

  這裡,classname 是類別的名字,在該類別中定義static方法。可以看到,這種格式與透過物件參考變數呼叫非static方法的格式類似。一個static變數可以以相同的格式來存取-類別名稱加點號運算子。這就是Java 如何實現全域功能和全域變數的一個控製版本。

  下面就是一個例子。在main() 中,static方法callme() 和static 變數b在它們的類別之外被存取。

class StaticDemo {   
static int a = 42;   
static int b = 99;   
static void callme() {   
 
System.out.println("a = " + a);   
}   
}   
 
class StaticByName {   
 
public static void main(String args[]) {   
StaticDemo.callme();   
System.out.println("b = " + StaticDemo.b);   
}   
}

  下面是該程式的輸出:

a = 42
b = 99

 static成員是不能被其所在class建立的實例存取的。

  如果不加static修飾的成員是物件成員,也就是歸每個物件所有的。

  加static修飾的成員是類別成員,就是可以由一個類別直接調用,為所有物件共有的。

   

#

以上是Java中static和final一起使用實現什麼效果的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn