在程式執行過程中,其值不能改變的量稱為常量,其值能被改變的量稱為變量。變量與常量的聲明都必須使用合法的辨別符,所有變量與常量隻有在聲明之後才能使用。
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 = "中國";
}
}