3.3 变量
前面的代码使用了很多变量,那么究竟变量是什么呢?本节将介绍变量的基本概念,以及如何操作变量。
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 04 { 05 int a=10; 06 int b=21; 07 public static void main(String[] args) 08 { 09 var v=new var(); 10 System.out.println("这个是全局变量a="+ v.a); 11 v.print(); 12 } 13 void print() 14 { 15 int c=20; 16 System.out.println("这个是局部变量c="+ c); 17 } 18 }
【代码说明】第5~6行定义了两个变量,它们在main()方法外,第10行调用这个变量。第15行在print()方法内定义了变量c,第16行在当前方法内输出此变量。
【运行效果】
这个是全局变量a=10 这个是局部变量c=20
【实例3.10】如果在main()中同样输出“c”的值,会出现什么样的结果呢?下面从实际代码段中仔细体会。
01 public class Math1 02 { 03 public static void main(String[] args) 04 { 05 Math1 v=new Math1(); 06 System.out.println("这个是局部变量c="+ v.c); 07 } 08 void print() 09 { 10 int c=20; 11 } 12 }
【运行效果】以上代码在编译时,会出现错误,就是找不到变量“c”。这说明变量“c”只在方法“print()”中起作用,在方法外就无法再调用。
【代码说明】从上述代码中可以看出,如果一个变量在类中定义,那么这个变量就是全局变量,例如下面的代码段。
01 public class var 02 { 03 int a=10; 04 int b=21; 05 }
这里的变量“a”、“b”都是全局变量,而在类的方法、函数中定义的变量就是局部变量,例如下面的代码段。
01 public class var 02 { 03 void print() 04 { 05 int c=20; 06 } 07 }
这里的变量“c”就是局部变量。因为它不是在类中直接定义的,而是在类的方法中定义的。
2. 从类型来分
如果从类型来分,可以将变量分成基本类型变量和对象类型变量,而基本类型变量就是前面说的那8种基本数据类型的变量,如整型、浮点型、字符型、布尔型等。
说明
对象类型将在后面的章节中介绍,这里暂时不做具体的说明。
3. 以所属范围分
如果按所属范围来分,可以将变量分成类变量和成员变量,类变量就是用关键字“static”声明的全局变量,它是属于类的。而成员变量就是不用“static”声明的其他实例变量,它是随对象本身的。
其实类变量就是在类中直接定义的,并且不随类产生的对象变化而变化。当在一个类中声明了一个类变量时,无论创造出多少个对象,使用对象引用这个变量,都不会发生变化。成员变量就不同了,它随着对象不同而变化。即针对同一个类,新创建一个对象,使用此对象引用这个变量,每次引用的值都不一样。