Java学习总结——Java中的常量与变量

肆——Java最常用的编程元素:常量与变量

一、常量

一般来说,所有的程序设计语言都需要定义常量(Constant)。所谓常量,就是固定不变的量,其一旦被定义并赋初值后,它的值就不能再被改变。

1.声明常量

在Java语言中,主要是利用关键字final来进行定义常量的,声明常量的语法为:

    final  数据类型  常量名称 [=值];

常量名称通常使用大写字母,但不是硬性要求,仅仅是编码习惯。值得注意的是,虽然Java中有关键字const,但目前并没有被Java正式启用。const是C++中定义常量的关键字。

常量标识符和变量标识符规定一样,可由任意顺序的大小写字母、数字、下划线( _ )和美元符号( $ )等组成,标识符不能以数字开头,也不能是Java中的保留关键字。

此外,在定义常量时,需注意如下两点:

(1)必须要在常量声明时对其进行初始化,否则会出现编译错误。常量一旦初始化后,就无法再次对这个常量进行赋值。

(2)final 关键字不仅可以用来修饰基本数据类型的常量,还可以用来修饰 “ 对象引用 ” 或者方法。

2.常量示例(加粗字体为定义常量)

行数 代码
01 //在Java中定义常量
02 public  class  Test
03 {
04     static  final  int  HOUR = 24;//定义一个静态常量
05     public static void main(String[] args)
06     {
07         System.out.println("一天有:" + HOUR + "个小时");
08     }
09 }

注意:static  final  int  HOUR = 24;这句中的static是Java的关键字。只有加了static才能被main函数引用。

二、变量

变量是利用声明的方式,将内存中的某个内存块保留下来以供程序使用,其内的值是可变的。可声明的变量数据类型有整型(int)、字符型(char)、浮点型(float或double),也可以是其他的数据类型(如自定义的数据类型——类)。在英语中,数据类型的“type”和类的“class”本身就是一组同义词,所以二者在地位上是对等的。

1.声明变量

声明变量有两个作用。

(1)指定在内存中分配空间大小。

变量在声明时,可以同时给予初始化(即赋予初始值)。

(2)规定这个变量所能接受的运算。

例如:整数数据类型int只能接受加、减、乘、除(+,-,*,/)等运算符。

其实在本质上,“类”就是在诸如整型、浮点型等基本数据“不够用”时,用户自定义的一种数据类型(User—Difined Type,UDT)。正是有了类型的区分,各个不同类型的变量就可以根据其类型所规定的操作范围“各司其职”。

因此,任何一个变量在声明时必须给予它一个类型,而在相同的作用范围内,变量还必须有个独一无二的名称。

注意:变量的值永远以最后更新的值为准。

扩展:声明一个变量时,编译程序会在内存里开辟一块足以容纳此变量的内存空间给它。不管该变量的值如何改变,都永远使用相同的内存空间。常量是不同于变量的一种类型,它的值是固定的,通常给变量赋值时,会将常量赋值给变量。

2.变量的命名规则

变量也是一种标识符,所以它也遵循标识符的命名规则。规则如下:

命名规则
(1)变量名可由任意顺序的大小写字母、数字、下划线( _ )和美元符号( $ )等组成。
(2)变量名不能以数字开头。
(3)变量名不能是Java中的保留关键字。

3.变量的作用范围

变量是有作用范围(Scope)的,作用范围有时也称作用域。一旦超出变量的作用范围,就无法再使用这个变量。

按作用范围进行划分,变量分为成员变量和局部变量。

(1)成员变量(加粗字体为定义的成员变量)

在类体重定义的变量为成员变量。它的作用范围为整个类,也就是说在这个类中都可以访问到定义的这个成员变量。

行号 代码
01 //定义类中的成员变量
02 public class Test
03 {
04     static int num = 1;    //定义一个成员变量
05     public  staitc  void  main(String[] args)
06     {
07         System.out.println("成员变量num的值是:" + num);
08     }
09 }

 

(2)局部变量(加粗字体为定义的局部变量)

在一个函数(或称方法)或函数内代码块(code block)中定义的变量称为局部变量,局部变量在函数或代码块被执行时创建,在函数或代码块结束时被销毁。局部变量在进行取值操作前必须被初始化或赋值操作,否则会出现编译错误。

Java存在块级作用域,在程序中任意大括号包装的代码块中定义的变量,它的生命仅仅存在于程序运行改代码块时。当跳出方法体(method body)之外,该变量就不能被使用了。

行号 代码
01 //定义类中的局部变量
02 public class Test
03 {
04     //局部变量声明在方法体内!
05     public  staitc  void  main(String[] args)
06     {
07        for(int i = 0; i<=10; i++)
08        {
09           int num = 0;
10           num = num + i;
11           System.out.println("i = " + i + ",sum = " + sum);
12        }
13     }
14 }

 

块(block)作用范围除了用for(while)循环或方法体的左右花括号{ }来界定外,还可以直接用花括号{ }来定义“块”,也就是说,出了这个“块”,它的生命周期就终结了。

一般来说,所有变量都遵循“先声明,后使用”的原则。这是因为变量只有“先声明”,它才能在内存中“存在”,之后才能被其他方法所“感知”并使用,但是存在于类中成员变量(不再任何方法内),它们的作用范围是整个类范围(class level),在编译器的“内部协调”下,变量只要作为类中的数据成员被声明了,就可以在类内部的任何地方使用,无需满足“先声明,后使用”的原则。

三、本文注意事项

1.Java中作用范围是禁止嵌套的,而在C/C++中则是允许的。

在Java中,在方法(函数)内定义的变量,其作用范围(包括方法的参数)是从它定义的地方开始,到它所作用范围终结的位置处结束。例如:在一个for循环体中定义了变量 i ,那么在这个 for 循环内不能再有同名变量,但出了 for 循环之后,是可以再次定义的。这就是作用域不能嵌套的意思。

而在C/C++中,作用域可以嵌套,甚至无限制地嵌套下去,这里每对大括号之间就是一个独立的作用域,内嵌套的同名变量覆盖外嵌套的同名变量。

如下所示:

C/C++语法允许作用域嵌套 Java语法不允许作用域嵌套
Fun() Fun()
{ {
    int  num = 1;     int  num = 1;
    {     {
        int num = 2;         int num = 2;
        //正确输出num = 2,内嵌套的局部变量优先         //编译错误:和{ }外的变量num的作用域重叠
        cout<<" i= "<         System.out.println(" i= " + i);
    }     }
} }

 

2.Java中类与方法中变量作用域可以嵌套

在Java中,类与方法之间作用域是可以嵌套的,可以把整个类看做一个大的作用域,它定义的字段(或称数据成员)可被方法中的同名字段所屏蔽,其行为类似于上表左侧的C/C++的作用域嵌套。

如下所示:

行号 代码
01 public class Test
02 {
03     public  staitc  void  main(String[] args)
04    {
05        int x = 1; 
06        System.out.println("x=" + x);
07    }
08    private int x;
09 }

 

第05行所定义的 x ,作为类 Test 的数据成员,它的作用域是整个类,即从第 02 行到第 08 行之间,这个范围包括了第 03 行到第 07 行,而这个区域内的 main 方法,其内部也定义了一个名为 x 的变量,在这个范围内,第 08 行定义的变量 x 被第 05 行定义的变量 x 所覆盖。

四、本文自我总结

不要将心情的起伏带到学习或工作当中!加油,Java!

你可能感兴趣的:(Java)