作者:CHAITANYA SINGH
来源:
通过示例学习Java编程(4):Java中的变量-方家话题www.koofun.com变量是用来存放可以更改的值的容器。例如,当我写int i = 10; 这里变量名是i,它与值10相关联,int i是表示该变量i可以存放整数值的数据类型。 我们将在下一个教程中介绍数据类型。 在本教程中,我们只讨论变量。
如何在Java中声明变量
要声明变量,请遵循以下语法:
1data_type variable_name = value;
这里的data_type表示数据类型,variable_name代表变量名字,value代表具体的数值。这个语句data_type variable_name的意思就是声明(宣布)一个叫variable_name的变量,这个变量的数据类型是data_type。后面的variable_name = value表示把数值value放到variable_name这个变量里面。在java编程中,您也可以先声明变量,然后再将值赋值给它,这样下面的两条语句可以起到和上面的一条语句一样的作用:
data_type variable_name;
variable_name = value;
我们看这个例子:
int
num;
这里num是变量名(变量命名一定要贴近变量的作用,这里num是数字这个单词number的头三个字母,表示用来存放数字),int是整数型数据类型,这条语句的意思就是声明或宣布一个类型为整数型(int)的变量num。数据类型有很多种,最常见的是int(整数,如10,120,130,等等)和char(字符,如'A','B',等等)。int表示整数,是integer(整数)的前三个字母,char表示字符,是character(字符)的前二个字母。具体的各种数据类型我们在后续的教程里面还会有详细的讨论,所以不要太担心它,只需了解到int num的意思就是声明一个数据类型是int的变量num,这个num变量里面只能保存整数值。
类似地,我们可以在声明变量时将值赋值,如下所示:char
ch = 'A';
int
number = 100;
或者我们可以这样做:char
ch;
int
number;
...
ch = 'A';
number = 100;
java中的变量命名规则:
1)变量命名不能包含空格,例如:int num ber=100;因为变量名中有空格,因此无效。
2)变量名可以特殊字符(如$和_)开头。
3)根据java编码标准,变量名应该以小写字母开头,例如int数;对于有多个单词的长变量名称,可以这样做:int smallNumber;int bigNumber;(变量名里面第一个字母要小写,后面的单词的第一个字母要大写,如smallNumber变量名里面,单词small的s要小写,但后面的单词number的第一个字母N要大写)。
4)变量名在Java中要区分大小写,意思就是如果两个变量即使字母一模一样,但如果其中的字母有大小写的不同,也表示这是两个不同的变量。例如,smallN和smalln由于最后的字母一个是大写N,一个是小写n,就表示这是两个不同的变量。
Java中的变量类型,共有三种:
1)局部变量(Local variable)
2)静态(或类)变量(Static or class variable)
3)实例变量(Instance variable)
静态(或类)变量(Static or class variable)
静态变量也称为类变量,因为它们与类相关联,并且对于所有的类实例(class instance),也称为对象(object),都是通用的。 例如,如果我创建一个类的三个对象并访问这个类的静态变量,那么对这个类所有的三个对象来说,结果都是一样的。如果通过某个对象改变了静态变量的值,那么在这个类所有的三个对象看来,这个静态变量的值都改变了。
静态变量示例public
class
StaticVarExample {
public
static
String myClassVar="class or static variable(类或静态变量)";
public
static
void
main(String args[]){
StaticVarExample obj = new
StaticVarExample();
StaticVarExample obj2 = new
StaticVarExample();
StaticVarExample obj3 = new
StaticVarExample();
//下面三行代码显示以下文字: "class or static variable(类或静态变量)"
System.out.println(obj.myClassVar);
System.out.println(obj2.myClassVar);
System.out.println(obj3.myClassVar);
//下面代码通过调用对象obj2来改变静态变量myClassVar的值
obj2.myClassVar = "Changed Text(这是更新后的文字)";
//下面三行代码都可以显示以下文字:"Changed Text(这是更新后的文字)"
System.out.println(obj.myClassVar);
System.out.println(obj2.myClassVar);
System.out.println(obj3.myClassVar);
}
}
输出文字:
class
or static
variable(类或静态变量)
class
or static
variable(类或静态变量)
class
or static
variable(类或静态变量)
Changed Text(这是更新后的文字)
Changed Text(这是更新后的文字)
Changed Text(这是更新后的文字)
正如您所看到的,所有三个语句都显示相同的输出结果,而不管通过哪个实例访问它。这就是为什么我们可以访问静态变量而不使用这样的对象:
System.out.println(myClassVar);
请注意,只有静态变量才能像这样访问。例如,这种访问方法不适用于局部变量。
实例变量(Instance variable)
类的每个实例(对象)都有自己的实例变量副本。 与静态变量不同,实例变量拥有自己独立的实例变量副本。 我们在下面的程序中使用对象obj2更改了实例变量值,当我们使用所有三个对象显示变量时,只有obj2值被更改,其他二个对象的值保持不变。 这表明它们有自己的实例变量副本。
实例变量示例public
class
InstanceVarExample {
String myInstanceVar="instance variable(这是实例变量)";
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(这是实例变量)
instance variable(这是实例变量)
instance variable(这是实例变量)
instance variable(这是实例变量)
Changed Text(这是更新后的文字)
instance variable(这是实例变量)
局部变量(Local variable)
在类的方法中声明的变量叫做局部变量,它们的使用范围仅限于方法内部的代码,这意味着您不能在方法之外的地方写代码来更改或访问在方法中声明的局部变量的值。
在本例中,为了演示局部变量的作用域,我声明了与局部变量同名的实例变量,来看看有什么效果。
局部变量示例
public
class
VariableExample {
// instance variable
public
String myVar="instance variable(这是实例变量)";
public
void
myMethod(){
// local variable
String myVar = "Inside Method(进入方法内,这是局部变量)";
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(开始调用方法)");
obj.myMethod();
System.out.println(obj.myVar);
}
}
输出文字:Calling Method(开始调用方法)
Inside Method(进入方法内,这是局部变量)
instance variable(这是实例变量)
注意在方法之外的代码语句是不能更改和访问方法之内声明的局部变量的,如果我在类的代码中没有声明实例变量myVar,只在类的某个方法中声明了局部变量myVar,那么语句System.out.println(obj.myVar)就会引发编译报错。