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”声明的其他实例变量,它是随对象本身的。

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