12.Java靜態變量與常量

轉載請保留原文鏈接: http://dashidan.com/article/java/basic/12.html

12.Java靜態變量與常量

`static`修飾的成員變量和成員方法習慣上稱爲靜態變量和靜態方法,可以直接通過類名來訪問. 只要這個類被加載,Java虛擬機就能根據類名在運行時數據區的方法區內定找到他們. 因此`static`修飾的變量和方法,可以在它所屬的對象創建之前訪問,不用創建對象.

① 靜態變量

訪問語法爲:

類名.靜態方法名(參數列表...)
類名.靜態變量名</p>

按照是否靜態的對類成員變量進行分類可分兩種:

  • 被static修飾的變量,叫靜態變量或類變量.

  • 沒有被static修飾的變量,叫實例變量.

1.靜態變量與實例變量區別:

  1. 靜態變量在內存中只有一個拷貝(節省內存), JVM只爲靜態分配一次內存.在加載類的過程中完成靜態變量的內存分配. 可用類名直接訪問, 當然也可以通過對象來訪問(不推薦).

  2. 對於實例變量, 每創建一個實例, 就會爲實例變量分配一次內存, 實例變量可以在內存中有多個拷貝, 互不影響, 需要通過實例的引用來訪問.

2.靜態變量應用場景:

  • 在對象之間共享值時

  • 方便訪問變量時


貓都有4條腿,2隻眼睛一張嘴.這3條屬性是貓的通用屬性,我們便可以把這三個屬性設置爲static靜態變量.

return返回值

我們在定義靜態變量時,通常將所有字母大寫,與實例變量作區分.

靜態方法

靜態方法可以直接通過類名調用, 任何的實例也可以調用.因此靜態方法只能訪問所屬類的靜態變量和靜態方法, 不能用`this`和`super`關鍵字.不能直接訪問所屬類的實例變量和實例方法(沒有static修飾的成員變量和成員方法).

示例代碼:

package com.dashidan.lesson11;/**
 * 大屎蛋教程網-dashidan.com
 * <p>
 * Java教程基礎篇: 11. Java靜態變量與常量
 */public class Demo1 {
    public static void main(String[] args) {
        /** 出處貓的靜態屬性*/
        System.out.println("MOUSE_NUM: " + Cat.MOUSE_NUM);
        System.out.println("EYE_NUM: " + Cat.EYE_NUM);
        System.out.println("LEG_NUM: " + Cat.LEG_NUM);
    }}

Cat類:

package com.dashidan.lesson11;/**
 * 大屎蛋教程網-dashidan.com
 * <p>
 * Java教程基礎篇: 11. Java靜態變量與常量
 * Cat 類
 */public class Cat {
    public static int MOUSE_NUM = 1;
    public static int EYE_NUM = 2;
    public static int LEG_NUM = 4;}

輸出:

MOUSE_NUM: 1
EYE_NUM: 2
LEG_NUM: 4

② Java常量

final是Java的一個保留關鍵字, 可以聲明成員變量、方法、類以及局部變量. 被聲明final的變量, 一但賦值便不能再次修改.編譯器會檢查代碼,如果你試圖將變量再次初始化的話,編譯器會報編譯錯誤.final變量經常和static關鍵字一起使用作爲常量.

例:

public static final WEB_NAME = "大屎蛋教程網."public static final WEB_URL = "http://dashidan.com"

1.final關鍵字要點

  • 方法前面加上final關鍵字,代表這個方法不可以被子類的方法重寫.

  • 類名前面加上final關鍵字,代表這個方法不可以被繼承.

  • final關鍵字可以用於成員變量、局部變量、方法以及類.

  • final成員變量必須在聲明的時候初始化或者在構造器中初始化, 否則就會報編譯錯誤.

  • 不能對final變量再次賦值.

  • fina局部變量必須在聲明時賦值.

  • 在匿名類中所有變量都必須是final變量.

  • final方法不能被重寫.

  • final類不能被繼承.

  • 接口中聲明的所有變量本身是final的.

  • final和abstract這兩個關鍵字是反相關的, final類就不可能是abstract的.

  • final方法在編譯階段綁定, 稱爲靜態綁定(static binding).

  • 沒有在聲明時初始化final變量的稱爲空白final變量(blank final variable), 必須在構造器中初始化, 或者調用this()初始化. 否則編譯器會報錯.

  • 將類、方法、變量聲明爲final能夠提高性能, 這樣JVM就有機會進行估計,然後優化.

  • 按照Java代碼慣例,final變量就是常量, 而且通常常量名要大寫

  • 對於集合對象聲明爲final指的是引用不能被更改, 但可以向其中增加, 刪除或者改變內容.

final關鍵字

涉及到了很多類的繼承相關的概念, 可以參考Java教程進階篇Java對象相關的文章後, 再回頭看這些知識就很好理解了.Java對象

③ 相關文章

 Java從入門到精通目錄


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