Logo

郎哥编程

标识符、关键字与变量

2021-03-21 48

学习目标:掌握Java标识符的命名,了解Java关键字,掌握变量和常量的使用方法。

标识符与关键字

标识符可以简单理解为一个名称,用来表示类名、变量名、方法名、数组名等有效字符序列。

在Java语言中,命名标识符需要遵循一定的规则:

(1)可以由字母(大写A—Z或小写a—z)、数字(0—9)和_(下划线)、美元符号($)组合而成。

(2)不能包含除“_”和“$”以外的任何特殊字符,如:%、#、&、逗号、空格等。

(3)不能包含空白字符(换行符、空格和制表符称为空白字符)。

(4)标识符的第一个字符不能是数字。

(5)标识符不能是Java语言保留的关键字。

下面是合法的标识符

address
john_2019
$dallor

下面是不合法的标识符

2019_john
name&age
User Name

在上面不合法的标识符中:标识符2019_john错误的原因在于用数字作为标识符的开始;标识符name&age错误的原因在于包含了特殊符号“&”;标识符User Name错误的原因在于包括了空格。

注意:标识符中的字母是严格区分大小写的。“guideContent”与“GuidContent”是两个不同的标识符。

Java语言的关键字

Java语言的关键字是Java已经预定义包含特殊意义的一些单词,这些预定义的单词不能作为标识符使用。Java语言常用的关键字如下表所示:

07.PNG

 变量与常量

变量的主要作用是用来存储数据,变量存储的数据内容称为变量的值。变量的值在程序的运行过程中是可以变化的,变量可以被重新赋值。常量是一种特殊的变量,常量被赋值后,常量的值在程序运行过程中不能被改变。

要弄清楚变量如何能存储数据这个问题,就要说到计算机存储器的概念。计算机存储器是存放程序和数据的地方,一个存储器由成千上万个存储单元组成,每个存储单元对应有一个位置编号。可以把社区看成一个存储器,社区内的所有住户就是社区的存储单元,每个住户都有门牌号,方便查询。存储单元的位置编号就是该存储单元的地址,程序可以通过地址方便地寻址到该存储单元。

当我们声明一个变量或常量时,计算机系统会为这个变量或常量分配存储单元,分配的存储单元数量与变量存储的内容有关,内容越多分配的存储元数量就越多,当给变量赋值时,实际上是把值存储到与变量相关的存储单元里面。下图变量num1、num2和result分别指向不同的存储单元。

08.png

变量或常量的命名除了要遵循标识符的命名规则外,还需要做到见名知意。见名知意的意思就是我看到变量名称,就知道这个变量表示的是什么意义。例如:在求长方形面积的程序中,我们可以命名两个变量,一个变量名称是width,用于存储长方形的宽度,一个变量名称是height,用于存储长方形的高度,这种变量命名方式显然要比num1和num2变量名更有意义。

下面是正确的变量命名示例:

width、height、book、result、num、num1、num2、book_price

下面是错误的变量命名示例:

123rate(以数字开头)、Book  Author(包含空格)、Address#(包含特殊字符)、class(calss是Java关键字)。

变量的声明

变量的声明语句是非执行语句,目的是为声明的变量预留存储空间,以备将来使用。

变量声明语法规则:访问权限  数据类型  变量名;

其中,访问权限是Java语言的权限关键字,可以是public、private、protected,访问权限可以省略,不声明访问权限时,该变量被赋为默认权限;数据类型可以是Java支持的任何数据类型;变量名为声明的变量名称。

示例:声明字符串变量

public  String   guideContent;

String   guideContent;

变量的初始化

对变量赋值的过程称为变量的初始化,声明变量时可以对变量直接赋值,如果在声明变量时没有对变量进行赋值,则应在后面的程序中为变量赋值。

示例:声明字符串变量并赋值

String   guideContent=” 我在学习Java编程”;

示例:为已声明的变量赋值

guideContent=” 我正在学习变量与常量”;

常量的声明

程序运行过程中,有些值需要保持不变。例如:在基于数学运算的程序中,圆周率是固定不变的值。类似圆周率等在程序运行过程中固定不变的值可以定义为常量,便于使用。

Java常量的定义

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

其中,final是Java关键字,数据类型可以是Java语言支持的任何数据类型。

示例:圆周率常量定义

final  double  PI = 3.14;

其中,double是Java数据类型之一,后面会讲到。

案例1:在IDEA打开项目Punit2,在unit包下创建Java类Case2,在Case2类中创建变量r(半径)与常量PI(圆周率)并初始化为0,然后在main方法中修改变量r的值,最后输出变量r和常量PI的值。

Case2类的代码如下:

package com.unit;
 
public class Case2 {
    // 声明常量PI并赋值
    static double PI = 3.14;
    // 声明变量radius并初始化为0
    static double radius = 0.0;
 
    public static void main(String[] args) {
        // 修改变量radius的值
        radius = 3.5;
        // 输出常量PI的值到控制台
        System.out.println("常量PI的值为:" + PI);
        // 输出变量radius的值到控制台
        System.out.println("变量radius的值为:" + radius);
    }
 
}

 变量的有效范围

Java虚拟机会为声明的变量分配存储空间,用于存储数据。在程序运行过程中,当变量不再使用时,Java虚拟机会释放为变量分配的存储空间,此时变量已经完成了它的使命,变量处于消亡状态,因此变量是有生命周期的。

变量的声明周期是指从声明一个变量并分配存储空间开始,到释放该变量并清除所占用的内存空间结束。前面说过,在类中声明变量时,可以在类体中声明变量,也可以在类的方法中声明变量。在类中声明变量的位置,决定了变量的有效范围。

变量的有效范围是指程序代码能够访问变量的区域。在类方法中声明的变量只能在类的方法内部使用,类方法内部的代码可以访问该变量,类方法外部的代码如果访问该变量,代码编译时会报错。在类体中声明的变量,可以在整个类的内部使用。

根据变量的有效范围,可以把变量分为全局变量和局部变量。全局变量在类体中声明,全局变量也称为成员变量,多用于类的属性声明。局部变量在类方法中声明,多用于方法内部存储临时数据,其有效范围仅限于该变量所在的方法内。

成员变量(全局变量)

按照变量的访问方式,成员变量又分为静态变量和实例变量。

静态变量用static关键字修饰,只要类被加载到内存,静态变量就会被分配存储空间。静态变量可以在类没有实例化的情况下,其他类可以通过“类名.静态变量”的方式访问该变量。

实例变量只有在类被实例化的情况下,才能够分配存储空间。其他类可以通过“实例化对象名.实例变量”方式访问该变量。

关于类的实例化在后面的课程内容会详细讲述。

局部变量

在类方法中声明的变量称为局部变量,局部变量的有效范围只能在声明该变量的方法体内,方法体外的代码不能访问该变量。

当方法被调用时,Java虚拟机会为方法内的变量分配存储空间,当方法调用结束后,Java虚拟机会释放方法内所有变量的已分配的存储空间,变量也被销毁。

在方法体内声明的变量名称(局部变量)可以和类体中声明的变量名称(成员变量)相同,此时方法体内的变量会掩盖成员变量,成员变量在该方法中失效。

变量的有效范围如下图所示:

09.png

案例2:在Punit2项目unit包下创建Case3类,在类中声明一个静态变量age,一个实例变量name,在main方法中声明一个局部变量height和name,然后输出age、name、height三个变量的值到控制台。代码如下:

package com.unit;
 
public class Case3 {
    // 声明静态变量age
    static String age = "21";
    // 声明实例变量name
    String  name = "Mary";
 
    public static void main(String[] args) {
        // 声明局部变量height
        int height = 45;
        /**
         * 局部变量name和实例变量name名称相同
         * 实例变量name失效
         */
        String  name = "Henry";
        // 输出静态变量age
        System.out.println("静态变量age为:"+ age);
        // 输出实例变量name,实际输出的是局部变量name
        System.out.println("实例变量name为:"+ name);
        // 输出局部变量height
        System.out.println("局部变量height为:"+ height);
    }
 
}

程序运行结果如下图所示:

10.png

代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论