ZetCode

Java 词法结构

最后修改于 2024 年 1 月 27 日

在本文中,我们将介绍 Java 中的词法结构。

计算机语言和人类语言一样,都有词法结构。Java 程序的源代码由标记组成。标记是原子代码元素。在 Java 中,我们有注释、标识符、字面量、运算符、分隔符和关键字。

Java 程序由 Unicode 字符集中的字符组成。

Java 注释

注释供人类使用,用于阐明源代码。Java 中有三种类型的注释。

注释类型含义
// 注释单行注释
/* 注释 */多行注释
/** 文档 */文档注释

如果我们想添加一些小注释,可以使用单行注释。对于更复杂的解释,我们可以使用多行注释。文档注释用于准备自动生成的文档。这通过 javadoc 工具生成。

com/zetcode/Comments.java
package com.zetcode;

/*
  This is Comments.java 
  Author: Jan Bodnar
  ZetCode 2022
*/

public class Comments {

    // Program starts here
    public static void main(String[] args) {

        System.out.println("This is Comments.java");
    }
}

该程序使用两种类型的注释。

// Program starts here

这是一个单行注释的示例。

注释会被 Java 编译器忽略。

/*
  This is Comments.java 
/*  Author: Jan Bodnar */
  ZetCode 2022
*/

注释不能嵌套。上面的代码无法编译。

Java 空白符

Java 中的空白符用于分隔源文件中的标记。它也用于提高源代码的可读性。

int i = 0;

在某些地方需要空白符。 例如,在 int 关键字和变量名之间。在其他地方,禁止使用空白符。它们不能出现在变量标识符或语言关键字中。

int a=1;
int b = 2;
int c  =  3;

标记之间放置的空格量与 Java 编译器无关。空白符应在 Java 源代码中一致地使用。

Java 标识符

标识符是变量、方法、类或参数的名称。标识符可以包含字母数字字符、下划线和美元符号 ($)。以数字开头作为变量名是错误的。名称中不允许有空格。

标识符区分大小写。 这意味着 NamenameNAME 指的是三个不同的变量。标识符也不能与语言关键字匹配。

还有一些与标识符命名相关的约定。名称应该具有描述性。我们不应该为标识符使用隐秘的名称。如果名称由多个单词组成,则每个后续单词都大写。

String name23;
int _col;
short car_age;

这些是有效的 Java 标识符。

String 23name;
int %col;
short car age;

这些是无效的 Java 标识符。

以下程序演示了变量名区分大小写。即使该语言允许这样做,也不建议这样做。

com/zetcode/CaseSensitiveIdentifiers.java
package com.zetcode;

public class CaseSensitiveIdentifiers {

    public static void main(String[] args) {
        
        String name = "Robert";
        String Name = "Julia";

        System.out.println(name);
        System.out.println(Name);
    }
}

Namename 是两个不同的标识符。 在 Visual Basic 中,这是不可能的。 在这种语言中,变量名不区分大小写。

$ java com.zetcode.CaseSensitiveIdentifiers 
Robert
Julia

Java 字面量

字面量是某种类型特定值的文本表示形式。字面量类型包括布尔值、整数、浮点数、字符串、null 或字符。 从技术上讲,字面量将在编译时赋值,而变量将在运行时赋值。

int age = 29;
String nationality = "Hungarian";

在这里,我们将两个字面量分配给变量。 数字 29 和字符串“Hungarian”是字面量。

com/zetcode/Literals.java
package com.zetcode;

public class Literals {

    public static void main(String[] args) {

        int age = 23;
        String name = "James";
        boolean sng = true;
        String job = null;
        double weight = 68.5;
        char c = 'J';

        System.out.format("His name is %s%n", name);
        System.out.format("His is %d years old%n", age);

        if (sng) {
            
            System.out.println("He is single");
        } else {
            
            System.out.println("He is in a relationship");
        }

        System.out.format("His job is %s%n", job);
        System.out.format("He weighs %f kilograms%n", weight);
        System.out.format("His name begins with %c%n", c);
    }
}

在上面的例子中,我们有几个字面量值。 23 是一个整数文字。“James”是一个字符串字面量。 true 是一个布尔字面量。 null 是表示缺失值的字面量。 68.5 是一个浮点字面量。 'J' 是一个字符字面量。

$ java com.zetcode.Literals 
His name is James
His is 23 years old
He is single
His job is null
He weighs 68.500000 kilograms
His name begins with J

Java 运算符

运算符是用于对某个值执行操作的符号。运算符用于表达式中,以描述涉及一个或多个操作数的操作。

+    -    *    /    %    ^    &    |    !    ~
=    +=   -=   *=   /=   %=    ^=    ++    --
==   !=    <   >    &=  >>=   <<=   >=   <= 
||   &&    >>    <<    ?:

这是 Java 运算符的部分列表。我们将在本教程的后面部分讨论运算符。

Java 分隔符

分隔符是一个或多个字符的序列,用于指定纯文本或其他数据流中各个独立区域之间的边界。

[ ]   ( )   { }   ,   ;   .   "
String language = "Java";

双引号用于标记字符串的开头和结尾。分号 ; 字符用于结束每个 Java 语句。

System.out.println("Java language");

圆括号(小括号)始终跟在方法名称之后。在圆括号之间,我们声明输入参数。即使该方法不接受任何参数,也存在圆括号。System.out.println 方法接受一个参数,一个字符串值。点字符将类名 (System) 与成员 (out) 分隔开来,并将成员与方法名称 (println) 分隔开来。

int[] array = new int[5] { 1, 2, 3, 4, 5 };

方括号 [] 用于表示数组类型。它们也用于访问或修改数组元素。花括号 {} 用于初始化数组。花括号也用于括住方法或类的主体。

int a, b, c;

逗号字符分隔单个声明中的变量。

Java 关键字

关键字是 Java 语言中的保留字。 关键字用于在计算机程序中执行特定任务。 例如,定义变量、执行重复性任务或执行逻辑运算。

Java 拥有丰富的关键字。 本教程将解释其中许多内容。

abstract        continue        for             new             switch 
assert          default         goto            package         synchronized
boolean         do              if              private         this
break           double          implements      protected       throw
byte            else            import          public          throws
case            enum            instanceof      return          transient
catch           extends         int             short           try
char            final           interface       static          var 
class           finally         long            strictfp        void 
const           float           native          super           volatile
                                                                while

在以下小程序中,我们使用了几个 Java 关键字。

com/zetcode/Keywords.java
package com.zetcode;

public class Keywords {

    public static void main(String[] args) {

        for (int i = 0; i <= 5; i++) {
            
            System.out.println(i);
        }
    }
}

packagepublicclassstaticvoidintfor 标记是 Java 关键字。

Java 约定

约定是程序员在编写源代码时遵循的最佳实践。 每种语言都可以有自己的一套约定。 约定不是严格的规则; 它们只是编写高质量代码的建议。 我们提到了一些被 Java 程序员认可的约定。 (通常也被其他程序员认可)。

来源

Java 教程

在本文中,我们介绍了 Java 语言的一些基本词法。

作者

我叫 Jan Bodnar,是一位充满激情的程序员,拥有丰富的编程经验。 自 2007 年以来,我一直在撰写编程文章。 迄今为止,我已经撰写了 1,400 多篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出所有Java教程