通過示例學(xué)習(xí)Java編程(4):Java中的變量
作者:CHAITANYA SINGH
來源:https://www.koofun.com//pro/kfpostsdetail?kfpostsid=14
變量是用來存放可以更改的值的容器。例如,當(dāng)我寫int i = 10; 這里變量名是i,它與值10相關(guān)聯(lián),int i是表示該變量i可以存放整數(shù)值的數(shù)據(jù)類型。 我們將在下一個教程中介紹數(shù)據(jù)類型。 在本教程中,我們只討論變量。
如何在Java中聲明變量
要聲明變量,請遵循以下語法:
data_type?variable_name?=?value;
這里的data_type表示數(shù)據(jù)類型,variable_name代表變量名字,value代表具體的數(shù)值。這個語句data_type
variable_name的意思就是聲明(宣布)一個叫variable_name的變量,這個變量的數(shù)據(jù)類型是data_type。后面的variable_name=value表示把數(shù)值value放到variable_name這個變量里面。在java編程中,您也可以先聲明變量,然后再將值賦值給它,這樣下面的兩條語句可以起到和上面的一條語句一樣的作用:
data_type?variable_name;
variable_name?=?value;
我們看這個例子:
int num;
這里num是變量名(變量命名一定要貼近變量的作用,這里num是數(shù)字這個單詞number的頭三個字母,表示用來存放數(shù)字),int是整數(shù)型數(shù)據(jù)類型,這條語句的意思就是聲明或宣布一個類型為整數(shù)型(int)的變量num。數(shù)據(jù)類型有很多種,最常見的是int(整數(shù),如10,120,130,等等)和char(字符,如'A','B',等等)。int表示整數(shù),是integer(整數(shù))的前三個字母,char表示字符,是character(字符)的前二個字母。具體的各種數(shù)據(jù)類型我們在后續(xù)的教程里面還會有詳細(xì)的討論,所以不要太擔(dān)心它,只需了解到int
num的意思就是聲明一個數(shù)據(jù)類型是int的變量num,這個num變量里面只能保存整數(shù)值。
類似地,我們可以在聲明變量時將值賦值,如下所示:
char ch?=?'A';
int number?=?100;
或者我們可以這樣做:
char ch;
int number;
...
ch?=?'A';
number??=?100;
java中的變量命名規(guī)則:
1)變量命名不能包含空格,例如:int num ber=100;因?yàn)樽兞棵杏锌崭?,因此無效。
2)變量名可以特殊字符(如$和_)開頭。
3)根據(jù)java編碼標(biāo)準(zhǔn),變量名應(yīng)該以小寫字母開頭,例如int數(shù);對于有多個單詞的長變量名稱,可以這樣做:int smallNumber;int bigNumber;(變量名里面第一個字母要小寫,后面的單詞的第一個字母要大寫,如smallNumber變量名里面,單詞small的s要小寫,但后面的單詞number的第一個字母N要大寫)。
4)變量名在Java中要區(qū)分大小寫,意思就是如果兩個變量即使字母一模一樣,但如果其中的字母有大小寫的不同,也表示這是兩個不同的變量。例如,smallN和smalln由于最后的字母一個是大寫N,一個是小寫n,就表示這是兩個不同的變量。
Java中的變量類型,共有三種:
1)局部變量(Local variable)
2)靜態(tài)(或類)變量(Static or class variable)
3)實(shí)例變量(Instance variable)
靜態(tài)(或類)變量(Static or class variable)
靜態(tài)變量也稱為類變量,因?yàn)樗鼈兣c類相關(guān)聯(lián),并且對于所有的類實(shí)例(class
instance),也稱為對象(object),都是通用的。
例如,如果我創(chuàng)建一個類的三個對象并訪問這個類的靜態(tài)變量,那么對這個類所有的三個對象來說,結(jié)果都是一樣的。如果通過某個對象改變了靜態(tài)變量的值,那么在這個類所有的三個對象看來,這個靜態(tài)變量的值都改變了。
靜態(tài)變量示例
public class StaticVarExample?{
???public static String?myClassVar="class?or?static?variable(類或靜態(tài)變量)";
???public static void main(String?args[]){
??????StaticVarExample?obj?=?newStaticVarExample();
??????StaticVarExample?obj2?=?newStaticVarExample();
??????StaticVarExample?obj3?=?newStaticVarExample();
??????//下面三行代碼顯示以下文字:?"class?or?static?variable(類或靜態(tài)變量)"
??????System.out.println(obj.myClassVar);
??????System.out.println(obj2.myClassVar);
??????System.out.println(obj3.myClassVar);
??????//下面代碼通過調(diào)用對象obj2來改變靜態(tài)變量myClassVar的值
??????obj2.myClassVar?=?"Changed?Text(這是更新后的文字)";
??????//下面三行代碼都可以顯示以下文字:"Changed?Text(這是更新后的文字)"
??????System.out.println(obj.myClassVar);
??????System.out.println(obj2.myClassVar);
??????System.out.println(obj3.myClassVar);
???}
}
輸出文字:
sor?staticvariable(類或靜態(tài)變量)
classor?staticvariable(類或靜態(tài)變量)
classor?staticvariable(類或靜態(tài)變量)
Changed?Text(這是更新后的文字)
Changed?Text(這是更新后的文字)
Changed?Text(這是更新后的文字)
正如您所看到的,所有三個語句都顯示相同的輸出結(jié)果,而不管通過哪個實(shí)例訪問它。這就是為什么我們可以訪問靜態(tài)變量而不使用這樣的對象:
System.out.println(myClassVar);
請注意,只有靜態(tài)變量才能像這樣訪問。例如,這種訪問方法不適用于局部變量。
實(shí)例變量(Instance variable)
類的每個實(shí)例(對象)都有自己的實(shí)例變量副本。
與靜態(tài)變量不同,實(shí)例變量擁有自己獨(dú)立的實(shí)例變量副本。
我們在下面的程序中使用對象obj2更改了實(shí)例變量值,當(dāng)我們使用所有三個對象顯示變量時,只有obj2值被更改,其他二個對象的值保持不變。
這表明它們有自己的實(shí)例變量副本。
實(shí)例變量示例
public class InstanceVarExample?{
???String?myInstanceVar="instance?variable(這是實(shí)例變量)";
???public static void main(String?args[]){
????InstanceVarExample?obj?=?new InstanceVarExample();
????InstanceVarExample?obj2?=?new InstanceVarExample();
????InstanceVarExample?obj3?=?new InstanceVarExample();
????System.out.println(obj.myInstanceVar);
????System.out.println(obj2.myInstanceVar);
????System.out.println(obj3.myInstanceVar);
????obj2.myInstanceVar?=?"Changed?Text(這是更新后的文字)";
????System.out.println(obj.myInstanceVar);
????System.out.println(obj2.myInstanceVar);
????System.out.println(obj3.myInstanceVar);
???}
}
輸出文字:
instance?variable(這是實(shí)例變量)
instance?variable(這是實(shí)例變量)
instance?variable(這是實(shí)例變量)
instance?variable(這是實(shí)例變量)
Changed?Text(這是更新后的文字)
instance?variable(這是實(shí)例變量)
局部變量(Local variable)
在類的方法中聲明的變量叫做局部變量,它們的使用范圍僅限于方法內(nèi)部的代碼,這意味著您不能在方法之外的地方寫代碼來更改或訪問在方法中聲明的局部變量的值。
在本例中,為了演示局部變量的作用域,我聲明了與局部變量同名的實(shí)例變量,來看看有什么效果。
局部變量示例
public class VariableExample?{
???//?instance?variable
???public String?myVar="instance?variable(這是實(shí)例變量)";
???public void myMethod(){
????????//?local?variable
????????String?myVar?=?"Inside?Method(進(jìn)入方法內(nèi),這是局部變量)";
????????System.out.println(myVar);
???}
???public static void main(String?args[]){
??????//?Creating?object
??????VariableExample?obj?=?new VariableExample();
??????/*?We?are?calling?the?method,?that?changes?the?
???????*?value?of?myVar.?We?are?displaying?myVar?again?after?
???????*?the?method?call,?to?demonstrate?that?the?local?
???????*?variable?scope?is?limited?to?the?method?itself.
???????*/
??????System.out.println("Calling?Method(開始調(diào)用方法)");
??????obj.myMethod();
??????System.out.println(obj.myVar);
???}
}
輸出文字:
Calling?Method(開始調(diào)用方法)
Inside?Method(進(jìn)入方法內(nèi),這是局部變量)
instance?variable(這是實(shí)例變量)
注意在方法之外的代碼語句是不能更改和訪問方法之內(nèi)聲明的局部變量的,如果我在類的代碼中沒有聲明實(shí)例變量myVar,只在類的某個方法中聲明了局部變量myVar,那么語句System.out.println(obj.myVar)就會引發(fā)編譯報(bào)錯。