「Java基本语法」标识符、关键字与常量

73 阅读1分钟

知识点解析

1.标识符(Identifiers): 用于命名类、方法、变量等。

标识符命名规则:

  1. 标识符由字母(A-Z,a-z)、数字(0-9)、下划线“_”或美元符号“$”组成。
  2. 标识符不能以数字、空格、特殊字符(例如,@、#)开头。
  3. 标识符不能是Java中的关键字。
  4. 标识符严格区分大小写,例如,name和Name是两个不同的标识符。
  5. 标识符的长度无限制,但建议简洁明了。

2.关键字(Keywords)

关键字是Java语言中具有特殊含义的保留字,它们被Java语言本身使用,不能用作标识符,关键字全部小写。

关键字的分类:

  1. 访问修饰符:public、private、protected。
  2. 控制流:if、else、for、while。
  3. 数据类型:int、double、boolean。
  4. 类相关:class、interface、extends。

3.常量(Constants)

常量是指在程序执行过程中其值不能被改变的固定值。

Java 中常量的主要类型:

  1. 字面常量(Literal Constants),直接写在代码中的固定值。

整数常量:10、-100、0x1A(十六进制)。

浮点常量:3.14、2.5f(float)、2.5d(double)。

字符常量:'A'、'\n'(转义字符)。

字符串常量:"Java"、""(空字符串)。

布尔常量:true、false。

  1. 使用final关键字定义的常量。
final int MAX_VALUE = 100;
final double PI = 3.1415926;
final String GREETING = "Hello World";
  1. 枚举常量,通过enum定义的枚举类型中的值
enum Weekday { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY }
  1. 静态常量,通常在类中定义,使用static final组合:
public class Constants {
    public static final int MAX_USERS = 1000;
    public static final String DEFAULT_NAME = "Guest";
}

案例解析

案例: 标识符的合法性验证1

public class IdentifierExample {
    public static void main(String[] args) {
        // 合法标识符
        String userName = "Alice";
        int _age = 25;
        final double PI = 3.14159;

        // 非法标识符(编译错误)
        // int 123name = 10; // 不能以数字开头
        // String class = "Math"; // 关键字不能作为标识符

        System.out.println("用户名: " + userName);
        System.out.println("年龄: " + _age);
        System.out.println("圆周率: " + PI);
    }
}

运行结果

用户名: Alice
年龄: 25
圆周率: 3.14159

代码解析

  1. Java源文件保存为“IdentifierExample.java”。
  2. userName、_age、PI是合法标识符。
  3. 注释掉的代码是非法标识符,会导致编译错误。

案例: 标识符的合法性验证2

public class IdentifierExample {
    public static void main(String[] args) {
        // 合法标识符
        String user_name = "Alice"; // 包含下划线
        int $count = 10; // 美元符号开头
        final double PI_VALUE = 3.14159; // 常量全大写

        // 非法标识符(取消注释会报错)
        // int 123name = 20; // 数字开头
        // String void = "key"; // 关键字冲突
        // String user name = "Bob"; // 包含空格

        System.out.println("用户名: " + user_name);
        System.out.println("计数: " + $count);
        System.out.println("圆周率: " + PI_VALUE);
    }
}

运行结果

用户名: Alice
计数: 10
圆周率: 3.14159

代码解析

  1. Java源文件保存为“IdentifierExample.java”。
  2. countusername是合法但非常规的标识符,实际开发中建议避免使用count和user_name是合法但非常规的标识符,实际开发中建议避免使用和下划线开头。
  3. PI_VALUE遵循常量命名规范。

案例: 常量的使用

public class ConstantExample {
    public static void main(String[] args) {
        // 整数常量
        int count = 100;
        // 浮点常量
        float price = 19.99f;
        // 字符常量
        char grade = 'A';
        // 字符串常量
        String message = "欢迎学习Java!";
        // 布尔常量
        boolean isActive = true;

        System.out.println("数量: " + count);
        System.out.println("价格: " + price);
        System.out.println("等级: " + grade);
        System.out.println("消息: " + message);
        System.out.println("是否激活: " + isActive);
    }
}

运行结果

数量: 100
价格: 19.99
等级: A
消息: 欢迎学习Java!
是否激活: true

代码解析

  1. Java源文件保存为“ConstantExample.java”。
  2. 浮点常量19.99f的f表示float类型。

案例: 常量的类型与使用

public class ConstantExample {
    public static void main(String[] args) {
        // 整数常量(十进制、十六进制)
        int decimal = 100;
        int hex = 0x1A; // 十六进制,值为26
        // 浮点常量(float和double)
        float floatValue = 19.99f;
        double doubleValue = 3.14159;
        // 字符常量(普通字符和转义字符)
        char letter = 'Z';
        char newline = '\n';
        // 字符串常量
        String greeting = "Hello,\nJava!"; // 包含转义字符
        // 布尔常量
        boolean isReady = true;
        System.out.println("十进制: " + decimal);
        System.out.println("十六进制: " + hex);
        System.out.println("浮点数: " + floatValue);
        System.out.println("双精度: " + doubleValue);
        System.out.println("字符: " + letter);
        System.out.println("换行符演示:" + newline + "结束");
        System.out.println(greeting);
        System.out.println("状态: " + isReady);
    }
}

运行结果

十进制: 100
十六进制: 26
浮点数: 19.99
双精度: 3.14159
字符: Z
换行符演示:
结束
Hello,
Java!
状态: true

代码解析

  1. Java源文件保存为“ConstantExample.java”。
  2. 0x1A是十六进制整数常量,值为 26。
  3. \n是转义字符,表示换行。
  4. greeting字符串中的\n会在输出时换行。

案例: 关键字与标识符冲突

public class KeywordConflict {
    public static void main(String[] args) {
        // 错误示例:关键字不能作为变量名
        // int public = 10; // 编译错误:public是关键字

        // 正确做法:使用非关键字标识符
        int visibility = 10;
        System.out.println("可见性: " + visibility);
    }
}

运行结果

可见性: 10

代码解析

  1. Java源文件保存为“KeywordConflict.java”。
  2. public是关键字,不能作为变量名。
  3. 修改为visibility后代码合法。

常见错误

错误:标识符以数字开头

示例:int 123value = 10;

错误提示:Identifier expected

解决方法:改为字母开头,如int value123 = 10;。

错误:标识符包含非法字符

示例:String user@name = "Alice";

错误提示:'@' is not a valid character

解决方法:移除特殊字符,如String userName = "Alice";。

错误:使用关键字作为标识符

示例:String class = "Java";

错误提示:'class' cannot be used as an identifier

解决方法:改为非关键字,如String className = "Java";。

错误:浮点常量缺少后缀

示例:float price = 19.99;

错误提示:possible loss of precision

解决方法:添加f后缀,如float price = 19.99f;。

错误:混淆常量与变量

示例:

final int MAX = 100;

MAX = 200; // 编译错误:常量不可修改

错误提示:Cannot assign a value to final variable MAX

解决方法:确保常量只赋值一次。

错误:浮点常量未指定类型

示例:float price = 9.99;

错误提示:possible loss of precision

解决方法:明确指定类型,如,float price = 9.99f;。

知识总结

标识符:用于命名,需遵循规则(字母/数字/下划线/美元符号,不能以数字开头,不能是关键字)。遵循标识符的命名规则,避免使用 $ 和下划线开头。

关键字:Java预定义的保留字,不可用作标识符。

常量:固定值,包括整数、浮点、字符、字符串和布尔类型。默认是final修饰,值不可变。

理论练习

判断标识符 的合法性

_name

123abc

class

user$Name

答案:合法标识符包括,_name、user$Name(合法但非常规)。

以下哪些是关键字

int

String

if

final

答案:关键字包括,int、if、final。

以下哪些是合法的常量?

3.14

'A'

"Hello"

true

答案:合法常量包括,3.14、'A'、"Hello"、true。

实操练习

练习:编写代码,定义一个合法的类名、变量名和常量名,并输出它们的值。

参考答案

public class MyClass {
    public static void main(String[] args) {
        String studentName = "Bob";
        final int MAX_SCORE = 100;
        System.out.println("学生姓名: " + studentName);
        System.out.println("最高分: " + MAX_SCORE);
    }
}

运行结果

学生姓名: Bob
最高分: 100

说明:Java源文件保存为“MyClass.java”。

练习:修改以下代码中的错误:

public class ErrorExample {
    public static void main(String[] args) {
        int 1stNumber = 10; // 错误1
        String class = "Math"; // 错误2
        float price = 25.5; // 错误3
    }
}

参考答案

public class ErrorExample {
    public static void main(String[] args) {
        int firstNumber = 10; // 修改为字母开头
        String className = "Math"; // 修改为非关键字
        float price = 25.5f; // 添加f后缀
    }
}