首頁 >Java >java教程 >Java中final和static關鍵字介紹

Java中final和static關鍵字介紹

零下一度
零下一度原創
2017-07-21 16:45:031891瀏覽
一、final

final類別不能被繼承,沒有子類,final類別中的方法預設是final的

final方法不能被子類別的方法複蓋,但可以被繼承

final成員變數表示常數,只能被賦值一次,賦值後不能再被改變

final不能用於修飾構造方法

private不能被子類別方法覆蓋,private類型的方法預設是final類型的

final修飾的變數有三種:靜態變數、實例變數和局部變量,分別表示三種類型的常量。

注意:final變數定義的時候,可以先聲明,而不給初值,這中變數也稱為final空白,無論什麼情況,編譯器都確保空白final在使用前必須被初始化。

二、static

        static表示「全域」或「靜態」的意思,用來修飾成員變數和成員方法,也可以形成靜態static程式碼區塊,但是Java語言中沒有全域變數的概念。

        修飾被static修飾的成員變數和成員方法獨立於該類別的任何物件。也就是說,它不依賴類別特定的實例,被類別的所有實例共用。只要這個類別被加載,Java虛擬機就能根據類別名稱在運行時資料區的方法區內定找到他們。因此,static物件可以在它的任何物件創建之前訪問,無需引用任何物件。
 
        static變數前可以有private修飾,表示這個變數可以在類別的靜態程式碼區塊中,或類別的其他靜態成員方法或非靜態成員方法中使用,但是不能在其他類別中透過類別名稱來直接引用,這一點很重要。其實你要搞明白,private是存取權限限定,static表示不要實例化就可以使用,這樣就容易理解多了。 static前面加上其它存取權限關鍵字的效果也以此類推。
 
        static修飾的成員變數和成員方法習慣上稱為靜態變數和靜態方法,可以直接透過類別名稱來訪問,存取語法為:
    類別名稱.靜態方法名稱(參數列表.. .) 
    類別名稱.靜態變數名稱
        以static修飾的程式碼區塊表示靜態程式碼區塊,當Java虛擬機(JVM)載入類別時,就會執行該程式碼區塊。
 
1、static變數
        依照是否靜態的類別成員變數分類可分兩種:一種是被static修飾的變量,稱為靜態變數或類別變數;另一種是沒有被static修飾的變量,叫做實例變數。兩者的差異是:
        對於靜態變數在記憶體中只有一個拷貝(節省記憶體),JVM只為靜態分配一次內存,在載入類別的過程中完成靜態變數的記憶體分配,可用類別名稱直接存取(方便),當然也可以透過物件來存取(但是這是不建議的)。
        對於實例變量,並未創建一個實例,就會為實例變量分配一次內存,並且實例變量可以在內存中有多個拷貝,互不影響(靈活)。
 
2、靜態方法
        靜態方法可以直接透過類別名稱調用,任何的實例也都可以調用,因此靜態方法中不能用this和super關鍵字,不能直接存取所屬類別的實例變量和實例方法(就是不帶static的成員變數和成員成員方法),只能存取所屬類別的靜態成員變數和成員方法。因為實例成員與特定的物件關聯!這個需要去理解,想明白其中的道理,不是記憶! ! !
        因為static方法獨立於任何實例,因此static方法必須實現,而不能是抽象的abstract。
 
3、static程式碼區塊
        static程式碼區塊也稱為靜態程式碼區塊,是在類別中獨立於類別成員的static語句區塊,可以有多個,位置可以隨便放,它不在任何的方法體內,JVM載入類別時會執行這些靜態的程式碼區塊,如果static程式碼區塊有多個,JVM會依照它們在類別中出現的先後順序依序執行它們,每個程式碼區塊只會執行一次。
 
4、static和final一塊用表示什麼
        static final用來修飾成員變數和成員方法,可簡單理解為「全域常數」!
        對於變量,表示一旦給值就無法修改,且可透過類別名稱存取。
        方法,表示無法覆寫,且可透過類別名稱直接存取。
        特別要注意一個問題:
        對被static和final修飾過的實例常數,實例本身不能再改變了,但對於某些容器類型(例如,ArrayList、HashMap)的實例常數可以改變容器變數本身,但可以修改容器中存放的對象,這點在程式設計上用到很多。
  透過static final修飾的容器類型變數中所「裝」的物件是可改變的。
#

以上是Java中final和static關鍵字介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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