3.3 变量
在上一节详细介绍了Java语言中的数据类型及其功能。在具体实例代码中我们定义了很多变量,那么变量究竟是什么呢?本节将介绍变量的基本概念,以及如何操作变量。
3.3.1 变量的声明
变量就是在程序的运行中可以变化的量,变量是程序设计中一个非常重要和关键的概念。在Java程序设计中,每个声明过的变量都必须分配一个类型。声明一个变量时,应该先声明变量的类型,随后再声明变量的名字。下面演示了变量的声明方式。
01 //salary,age,op都是变量名字 02 //double,int,boolean则是变量的类型 03 double salary; 04 int age; 05 boolean op;
每一行的第一项是变量类型,第二项是变量名。行尾的分号是必需的,这是Java语句的结束符号。如果没有这个分号,程序不会认为这是一句完整的Java语句。
同一类型的不同变量,可以声明在一行,也可以声明在不同行,如果在同一行中声明,不同的变量之间用逗号分隔,如下面的例子。
int studentNumber,people;
3.3.2 变量的含义
在程序设计中,经常会听到变量这个名词,到底什么是变量呢?它又有什么意义呢?
在程序运行过程中,空间内的值是变化的,这个内存空间就称为变量。为了操作方便,给这个空间取名,称为变量名,内存空间内的值就是变量值。所以,申请了内存空间,变量不一定有值,要想变量有值,就必须要放入值。
例如:代码“int x”,定义了变量但没有赋值,即申请了内存空间,但没有放入值。如果“int x=5”,说明不但申请了内存空间而且还放入了值,值为5。
3.3.3 变量的分类
变量的分类方式多种多样,不可能单纯地将变量划分为几类,下面将以不同的分类方式来讨论变量的分类问题。
1.根据作用范围划分
根据作用范围来分,一般将变量分为全局变量和局部变量。从字面上理解很简单,全局变量就是在程序范围之内都有效的变量,而局部变量就是在程序中的部分区域有效的变量。
【实例3-9】从专业的角度来解释,全局变量就是在类的整个范围之内都有效的变量。而局部变量就是在类中某个方法函数或某个子类内有效的变量,下面将从实际程序代码中慢慢地体会。
01 //a,b都是全局变量 02 //c是局部变量 03 public class Var //定义一个Var类 04 { 05 int a=10; //定义全局变量a 06 int b=21; //定义全局变量b 07 public static void main(String[] args) //主方法 08 { 09 var v=new Var(); //创建一个V对象 10 System.out.println("这个是全局变量a="+ v.a); //输出全局变量a 11 v.print(); //调用print方法 12 } 13 void print() //创建一个print方法 14 { 15 int c=20; //定义局部变量c 16 System.out.println("这个是局部变量c="+ c); 17 } 18 }
【代码说明】第5~6行定义了两个变量,它们在main()方法外。第15行在print()方法内定义了变量c,第16行在当前方法内输出此变量。
【运行效果】
这个是全局变量a=10 这个是局部变量c=20
【实例3-10】如果在main()方法中同样输出c的值,会出现什么样的结果呢?下面从实际代码段中仔细体会。
01 public class Math1 //定义一个Math1类 02 { 03 public static void main(String[] args) //主方法 04 { 05 Math1 v=new Math1(); //定义一个V对象 06 System.out.println("这个是局部变量c="+ v.c); //输出全局变量c 07 } 08 void print() //定义一个print方法 09 { 10 int c=20; //定义局部变量c 11 } 12 }
【运行效果】以上代码在编译时,会出现错误,即找不到变量c。这说明变量c只在方法print()中起作用,在方法外就无法再调用。
【代码说明】从上述代码中可以看出,如果一个变量在类中定义,那么这个变量就是全局变量,例如下面的代码段。
01 public class Var //定义一个Var类 02 { 03 int a=10; //定义全局变量a 04 int b=21; //定义全局变量b 05 }
这里的变量a、b都是全局变量,而在类的方法、函数中定义的变量就是局部变量,例如下面的代码段。
01 public class Var //定义一个Var类 02 { 03 void print() //定义一个print方法 04 { 05 int c=20; //定义局部变量c 06 } 07 }
这里的变量c就是局部变量。因为它不是在类中直接定义的,而是在类的方法中定义的。
2.根据类型划分
如果根据类型划分,可以将变量分为基本类型变量和对象类型变量,而基本类型变量就是前面说的8种基本数据类型的变量,如整型、浮点型、字符型、布尔型等。
说明 对象类型将在后面的章节中介绍,这里暂时不做具体的说明。
3.根据所属范围划分
如果按所属范围来分,可以将变量分为类变量和成员变量,类变量就是用关键字“static”声明的全局变量,它是属于类的。而成员变量就是不用“static”声明的其他实例变量,它是属于对象本身的。
其实类变量就是在类中直接定义的,并且不随类产生的对象变化而变化。当在一个类中声明了一个类变量时,无论创造出多少个对象,使用对象引用这个变量,都不会发生变化。成员变量就不同了,它随着对象不同而变化。即针对同一个类,新创建一个对象,使用此对象引用这个变量,每次引用的值都不一样。