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”声明的其他实例变量,它是随对象本身的。
其实类变量就是在类中直接定义的,并且不随类产生的对象变化而变化。当在一个类中声明了一个类变量时,无论创造出多少个对象,使用对象引用这个变量,都不会发生变化。成员变量就不同了,它随着对象不同而变化。即针对同一个类,新创建一个对象,使用此对象引用这个变量,每次引用的值都不一样。