3.4 变量如何初始化

在C、C++、C#等语言中,都会提到变量的初始化,有关对象类型变量的初始化将在后面的章节详细讲述,这里将把基本类型变量的初始化作为本节的主要内容。

【实例3-11】基本类型变量的初始化工作,就是给变量赋值。为了能够更加清晰地看到变量如何初始化,以及初始化时需要注意的知识点,下面通过实例来演示。

01        //通过不同类型的数据的输出来查看变量如何初始化
02        //所有的变量都是全局变量
03        public class Var0                                             //定义一个Var0类
04        {
05            byte x;                                                   //定义全局变量x
06            short y;                                                  //定义全局变量y
07            int z;                                                    //定义全局变量z
08            long a;                                                   //定义全局变量a
09            float b;                                                  //定义全局变量b
10            double c;                                                 //定义全局变量c
11            char d;                                                   //定义全局变量d
12            boolean e;                                                //定义全局变量e
13            public static void main(String[] args)                    //主方法
14            {
15                Var0 m=new Var0();                                    //创建一个对象m
16                System.out.println(" 打印数据x="+m.x);
17                System.out.println(" 打印数据y="+m.y);
18                System.out.println(" 打印数据z="+m.z);
19                System.out.println(" 打印数据a="+m.a);
20                System.out.println(" 打印数据b="+m.b);
21                System.out.println(" 打印数据c="+m.c);
22                System.out.println(" 打印数据d="+m.d);
23                System.out.println(" 打印数据e="+m.e);
24            }
25        }

【代码说明】第5~12行定义了8个变量,它们分别对应8种数据类型。我们并没有为其设置初始值,第16~23行直接在控制台输出这些变量,读者可以在下面的运行效果中发现有的变量具备默认值,但有的变量什么也不输出。

【运行效果】

打印数据x=0
打印数据y=0
打印数据z=0
打印数据a=0
打印数据b=0.0
打印数据c=0.0
打印数据d=
打印数据e=false

【实例3-12】从以上例子可以看出,作为全局变量,无须初始化,系统自动给变量赋值。除了字符型数据被赋值为空,布尔型数据被赋值为false,其他一律赋值为0,下面再看一段程序代码。

01        //通过不同类型的数据的输出来查看变量如何初始化
02        //所有的变量都是局部变量
03        public class Var1                                               //定义一个Var1类
04        {
05            void printnumber()                                          //定义一个printnumber方法
06            {
07                byte x;                                                 //定义局部变量x
08                short y;                                                //定义局部变量y
09                int z;                                                  //定义局部变量z
10                long a;                                                 //定义局部变量a
11                float b;                                                //定义局部变量b
12                double c;                                               //定义局部变量c
13                char d;                                                 //定义局部变量d
14                boolean e;                                              //定义局部变量e
15            }
16            public static void main(String[] args)                      //主方法
17            {
18                Var1 m=new Var1();                                      //创建对象m
19                System.out.println(" 打印数据x="+m.x);
20                System.out.println(" 打印数据y="+m.y);
21                System.out.println(" 打印数据z="+m.z);
22                System.out.println(" 打印数据a="+m.a);
23                System.out.println(" 打印数据b="+m.b);
24                System.out.println(" 打印数据c="+m.c);
25                System.out.println(" 打印数据d="+m.d);
26                System.out.println(" 打印数据e="+m.e);
27            }
28        )

【代码说明】第7~14行定义了8个变量,但其被定义在printnumber()方法中,属于局部变量。第19~26行在没有初始化这些变量的时候,在控制台输出这些变量,其实是不正确的。

【运行效果】这个程序段编译时就会报错,原因是所有局部变量都没有初始化。

从以上两段程序代码得出一个结果:全局变量可以不用进行初始化赋值工作,而局部变量必须要进行初始化赋值工作。