1. 程式人生 > >J5. 變量與常量

J5. 變量與常量

9.png 字母表 靜態化 空間 組成 再次 還需要 tab 了解

1.1 變量與常量

  在程序執行過程中,其值不能被改變的量稱為常量,其值能被改變的量稱為變量。變量與常量的命名都必須使用合法的標識符。

1.1.1 常量

  在程序運行過程中一直不會改變的量稱為常量(constant),通常也被稱為“final變量”。常量在整個程序中只能被賦值一次。在為所有的對象共享值時,常量是非常有用的。常量是不能改變的值。常量通常會被修飾為final static,final意味著這是不能修改的值,static是靜態,被static修飾的值可以直接通過類名調用,減少了在內存空間分配內存,減輕了內存空間的壓力。常量可以是基本數據類型,也可以是引用類型,如我們常見的單例。

1.1.1.1 常量的聲明以及註意事項

  在Java語言中聲明一個常量,除了要指定數據類型外,還需要通過final關鍵字進行限定。聲明常量的標準語法如下:

    final 數據類型 常量名稱[=值]

  常量名通常使用大寫字母,但這不是必須的。很多Java程序員使用大寫字母表示常量,是為了清楚地表明正在使用的常量。

  當定義的final變量屬於“成員變量”時,必須在定義時就設定他的初值,否則將會產生編譯錯誤。當常量要被靜態方法引用時,那麽必須將常量靜態化或者通過實例調用。

  註意:在靜態方法中不能調用非靜態的方法和引用非靜態的成員變量?如何理解?

  答:有static修飾的方法或變量,在程序運行時先初始化靜態的方法和變量。在這之前非靜態的還未初始故不能調用。若需調用要先靜態化。

1.1.1.2 常量的分類

  Java中常量主要分為兩大類:字面值常量和自定義常量

字面值常量又下面幾種:

  • 整數常量:所有整數,無窮多,正整數、負整數,例如:1、2、0等;對於整數有四種表現形式
  • 小數常量:包含所有小數,也叫浮點數,例如:1.2、2.0、等;
  • 布爾型常量:較為特殊的常量只包含兩個數值(true\false);
  • 字符常量:將一個字符或符號用‘ ’標識;
  • 字符串常量:將一個或多個字符用“ ”標識;
  • Null常量:只有一個數值就是null;

【例4.13】創建一個類ConstantPractice,被對其進行一些驗證;

class ConstantPractice{
    static final double dou = 23.23;    //定義的final變量屬於“成員變量”時,必須在定義時就設定他的初值,當它會在靜態方法中被引用時,那麽必須讓它成為靜態常量,否則將會產生編譯錯誤"無法從靜態上下文中引用非靜態"
    final boolean boo = true ;
    public static void main(String[] args){
        final int a ;
        int s = 34 ;
        a = 23 ;
        // a = 23 ;    //當我們已經聲明一個常量並對其賦值,那麽再次賦值會出現錯誤"可能已分配變量"
        System.out.println(a);
        System.out.println(dou);
    }
}

技術分享圖片

  註意:常量和變量有一點不同,變量可以在運行時賦值,所以成員字段可以未經初始化就被使用,但是常量不能在運行時改變,所以常量應該在聲明時就初始化,否則編譯不通過。

1.1.2 變量

1.1.2.1 變量的原理和聲明

  變量的使用是程序設計中一個十分重要的環節。定義變量就是要告訴編譯器(compiler)這個變量的數據類型這樣編譯器才知道需要配置多少空間給它,以及它能存放什麽樣的數據。在程序運行時空間內的值是變化的,這個內存空間就稱為變量。為了便於操作給這個空間取個名字,稱為變量名。變量的命名必須是合法的標識符。內存空間內的值就是變量值。在聲明變量時可以是沒有賦值,也可以是直接賦給初值。

  從本質上講,變量其實是內存中的一小塊區域,使用變量名來訪問這塊區域,因此,每一個變量使用前必須要先申請(聲明),然後必須進行賦值(填充內容),才能使用

簡單來說我麽可以將其總結為下面這幾點:

變量的概念

² 內存中的一個存儲區域

² 該區域有自己的名稱(變量名)和類型(數據類型)

² 該區域的數據可以在同一類型範圍內不斷變化

為什麽要定義變量

² 用來不斷的存放同一類型的常量,並可以重復使用

使用變量註意

² 變量的作用範圍(一對{}之間有效)

² 初始化值(成員變量不賦值是有默認值的)

變量的聲明(註:格式是固定的,記住格式,以不變應萬變。

數據類型 變量名 = 初始化值;

理解:變量就如同數學中的未知數。

【例4.14】創建一個VariablePractice類,並進行一些操作,進而分析。

class VariablePractice{
    static int age ;        //當變量要被靜態方法引用時,變量要靜態化
    static char char1 = ‘r‘ ;
    public static void main(String[] args){
        age = 78 ;
        int 年齡 = 26 ;
        System.out.println("大齡青年你的年齡是: "+年齡);
        System.out.println(age);
        System.out.println(char1);
    }
}

技術分享圖片

技術分享圖片

假設上面兩個變量定義在方法體中,則程序加載到程序區中。當執行此行程序代碼時,會在數據區配置空間給出這兩個變量。

1.1.2.2 變量的命名

  變量雖然是由程序與所命名的,但是變量的命名卻不是任意的,需要遵循一定的規則。Java中變量的命名規則如下:

  • l 變量名必須是一個有效的標識符。變量名必須使用Java語言中合法的標識符,即以字母、數字和下劃線組成,且首字母不能是數字,還不可以使用關鍵字。
  • l 變量名不能重復。如果存在兩個相同的變量名,那麽程序在運行時就不知道調用哪個變量了。
  • l 變量名稱應該見名知意。命名最好能夠通過變量名知道變量的內容,增加可讀性;方便維護。

  在Java語言中允許使用漢字或其他語言文字作為變量名,如“int 年齡 = 21”,在程序運行時並不會出錯,但還是建議不要這麽命名。

  變量名實際上只是一個指針指向內存中變量的那塊內存區域。

1.1.2.3 變量的有效範圍---成員變量、局部變量

  由於變量被定義出來後只能被暫放到內存中,等到程序執行到某一個點,該變量會被釋放掉,也就是說變量有它的生命周期。因此,變量的有效範圍是指程序代碼能夠訪問該變量的區域,若超出該區域則在編譯時出現錯誤。在程序中一般根據變量的“有效範圍”將變量分為“成員變量”和“局部變量”。

成員變量

  在類體中被定義的變量稱為成員變量,成員變量在整個類中都有效。類的成員變量又可分為兩種,即靜態變量和實例變量。下面我們通過一段代碼來了解一下。

【例4.15】聲明靜態變量和實例變量,示例代碼如下:

class var{
    int x = 45 ;
    static int y = 90 ;
}

  其中,x為實例變量,y為靜態變量(也稱類變量)。如果在成員變量的類型前面加上關鍵字static,這樣的成員變量稱為靜態變量。靜態變量的有效範圍可以跨類,甚至可以達到整個應用程序之內。對於靜態變量,除了能在定義它的類中存取,還能直接以“類名.靜態變量”的方式在其他類中使用。

局部變量

  在類的方法體中定義的變量(方法內部定義,“{”與“}”之間的代碼中聲明的變量)稱為局部變量。局部變量只在當前代碼塊中有效。通俗的理解就是在其所在的一對大括號中有效,出了這個大括號就沒有效了,在其它類體中不能調用該變量。

  在類的方法中聲明的變量,包括方法的參數,都屬於局部變量。局部變量只在當前定義的方法內有效,不能用於類的其他方法中。局部變量的生命周期取決於方法,當方法被調用時,Java虛擬機為方法中的局部變量分配內存空間,當該方法的調用結束後,則會釋放方法中局部變量占用的內存空間,局部變量也將會銷毀。

  局部變量可與成員變量的名字相同,此時成員變量將被隱藏,即這個成員變量在此方法中暫時失效。舉例證明如下:

【例4.16】在VariablePractice類中我們進行如下測試

class VariablePractice{
    static int age ;        //當變量要被靜態方法引用時,變量要靜態化
    static char char1 = ‘r‘ ;
    final int test = 99 ;
    public static void main(String[] args){
        age = 78 ;
        int 年齡 = 26 ;
        int test = 87 ;
        System.out.println("大齡青年你的年齡是: "+年齡);
        System.out.println(age);
        System.out.println(char1);
        System.out.print(test);
    }
}

技術分享圖片

  如上我們發現當存在一個成員變量時,我們在定義一個局部變量,且它們名字相同,這時在該局部變量所在方法中,成員變量暫時失效。

  成員變量和局部變量都有各自的有效範圍:

技術分享圖片

J5. 變量與常量