天天看點

常量與變量 java_JAVA常量和變量

在程式執行過程中,其值不能改變的量稱為常量,其值能被改變的量稱為變量。變量與常量的聲明都必須使用合法的辨別符,所有變量與常量隻有在聲明之後才能使用。

Java常量

常量通常也被稱為“final變量”。常量在整個程式中隻能被指派一次。在為所有對象共享值時,常量是非常有用的。在Java語言中聲明一個常量,除了要指定資料類型外,還需要通過final關鍵字進行限定。聲明常量的标準文法格式如下:

final 資料類型 常量名稱(=值)

在Java編碼規範中,要求常量名必須大寫,并且中間最好使用下劃線作為分隔符來進行連接配接多個單詞。

當定義的常量如果屬于“成員變量”,則必須在定義時就賦給初值,否則将會在編譯時出先錯誤。

常量在程式運作過程中主要作用——

1. 代表常數,便于程式的修改,比如:圓周率的值;

2. 增強程式的可讀性,比如:常量UP、DOWN、LEFT和RIGHT分辨代表上下左右,其數值分别是1、2、3和4)。

interface中定義常量:

public interface ConstantInterface {

String SUNDAY = "SUNDAY";

String MONDAY = "MONDAY";

String TUESDAY = "TUESDAY";

String WEDNESDAY = "WEDNESDAY";

String THURSDAY = "THURSDAY";

String FRIDAY = "FRIDAY";

String SATURDAY = "SATURDAY";

}

在interface中定義的常量預設是public static final類型的。是以我們定義String SUMMER = "Summner";的時候,就相當于預設加了public static final字首,意思與public static final String SUMMER = "Summer";等價。

在接口中定義常量,可以免去加public static final幾個單詞,少敲幾次鍵盤,但可以達到同樣的效果。

但是不推薦這種方式——

1. Java中設計出接口這種文法,就是為了用來實作或者繼承的,如果我們在實作類或者子類接口中定義了同名的常量,那麼子類接口或者實作類引用同名的常量,就可能不一緻。是不是很容易造成混亂。

2. 與接口的定義不相符,接口是一種規範,一種協定規定,主要用來定義必須要實作的API。用接口來定義常量,與創造接口的目的不相符,也有點大财小用。

3. 在interface中定義的常量屬于編譯型常量,每次更改常量值,都要重新編譯所有引用到它的類。

enum定義常量(推薦):

enum ConstantEnum {

SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY

}

普通類中定義常量:

public class ConstantClassField {

public static final String SUNDAY = "SUNDAY";

public static final String MONDAY = "MONDAY";

public static final String TUESDAY = "TUESDAY";

public static final String WEDNESDAY = "WEDNESDAY";

public static final String THURSDAY = "THURSDAY";

public static final String FRIDAY = "FRIDAY";

public static final String SATURDAY = "SATURDAY";

}

final class定義常量(常用):

public final class ConstantClassField {

public static final String SUNDAY = "SUNDAY";

public static final String MONDAY = "MONDAY";

public static final String TUESDAY = "TUESDAY";

public static final String WEDNESDAY = "WEDNESDAY";

public static final String THURSDAY = "THURSDAY";

public static final String FRIDAY = "FRIDAY";

public static final String SATURDAY = "SATURDAY";

}

這種方式最常用,但這種定義也是編譯型常量,如果更改常量值的話,還是需要重新編譯所有引用類。

Java變量

在Java語言中,所有的變量在使用前必須聲明。聲明變量的基本格式如下:

type identifier [ = value][, identifier [= value] ...] ;

格式說明:type為Java資料類型;identifier是變量名;可以使用逗号隔開來聲明多個同類型變量。

int a, b, c; // 聲明三個int型整數:a、b、cint d = 3, e = 4, f = 5; // 聲明三個整數并賦予初值byte z = 22; // 聲明并初始化zString s = "runoob"; // 聲明并初始化字元串sdouble pi = 3.14159; // 聲明了雙精度浮點型變量 pichar x = 'x'; // 聲明變量x的值是字元 'x'

變量雖然是由程式員所命名的,但是變量的命名并不是任意的,需要遵循一定的規則:

1. 變量名必須是一個有效的辨別符。

2. 變量名不能重複。

3. 應選擇有意義的單詞作為變量名。在命名變量名時,最好能通過變量名看出變量的内容,這樣既能友善讀者對程式的了解,增加可讀性,又友善程式的維護,減輕程式維護人員的工作負擔。

變量的有效範圍是值程式代碼能夠通路該變量的區域,若超出變量所在區域通路該變量則編譯時會出現錯誤。在程式中,一般會根據變量能夠通路的區域将變量分為成員變量和局部變量。

在類體中定義的變量被稱為成員變量,成員變量在整個類中都有效。類的成員變量又分為靜态變量(也稱類變量)和執行個體變量兩種。

局部變量(本地變量)——

1.聲明在方法、構造方法或者語句塊中;

2. 在方法、構造方法、或者語句塊被執行的時候建立,當它們執行完成後,變量将會被銷毀;

3. 通路修飾符不能用于局部變量;

4. 隻在聲明它的方法、構造方法或者語句塊中可見;

5. 在棧上配置設定的;

6.沒有預設值,是以局部變量被聲明後,必須經過初始化,才可以使用。

執行個體變量——

1. 聲明在一個類中,但在方法、構造方法和語句塊之外;

2. 當一個對象被執行個體化之後,每個執行個體變量的值就跟着确定;

3. 在對象建立的時候建立,在對象被銷毀的時候銷毀;

4. 值應該至少被一個方法、構造方法或者語句塊引用,使得外部能夠通過這些方式擷取執行個體變量資訊;

5. 可以聲明在使用前或者使用後;

6. 通路修飾符可以修飾執行個體變量;

7. 對于類中的方法、構造方法或者語句塊是可見的,一般情況下應該把執行個體變量設為私有,通過使用通路修飾符可以使執行個體變量對子類可見;

8. 具有預設值,數值型變量的預設值是0,布爾型變量的預設值是false,引用類型變量的預設值是null。變量的值可以在聲明時指定,也可以在構造方法中指定;

9. 可以直接通過變量名通路。

類變量(靜态變量)——

1. 在類中以static關鍵字聲明,但必須在方法構造方法和語句塊之外;

2. 無論一個類建立了多少個對象,類隻擁有類變量的一份拷貝;

3. 除了被聲明為常量外很少使用。常量是指聲明為public/private,final和static類型的變量。常量初始化後不可改變;

4. 儲存在靜态存儲區。經常被聲明為常量,很少單獨使用static聲明變量;

5. 在第一次被通路時建立,在程式結束時銷毀;

6. 與執行個體變量具有相似的可見性。但為了對類的使用者可見,大多數靜态變量聲明為public類型;

7. 預設值和執行個體變量相似。數值型變量預設值是0,布爾型預設值是false,引用類型預設值是null。變量的值可以在聲明的時候指定,也可以在構造方法中指定。此外,靜态變量還可以在靜态語句塊中初始化;

8. 可以通過:ClassName.VariableName的方式通路;

9. 類變量被聲明為public static final類型時,類變量名稱一般建議使用大寫字母。如果靜态變量不是public和final類型,其命名方式與執行個體變量以及局部變量的命名方式一緻。

public class VariableType {

//定義類變量 public static String name = "王路情";

//定義執行個體變量 public char sex = 'M';

public static void main(String[] args) {

//定義局部變量 String string = "中國";

}

}