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

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