# Java 语法结构

原文：http://zetcode.com/lang/java/lexis/

像人类语言一样，计算机语言也具有词汇结构。 Java 程序的源代码由令牌组成。 令牌是原子代码元素。 在 Java 中，我们具有注释，标识符，字面值，运算符，分隔符和关键字。

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

## Java 注释

注释被人类用来阐明源代码。 Java 中有三种类型的注释。

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

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

`com/zetcode/Comments.java`

```java
package com.zetcode;

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

public class Comments {

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

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

```

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

```java
// Program starts here

```

这是单行注释的示例。

Java 编译器将忽略注释。

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

```

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

## Java 空白字符

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

```java
int i = 0;

```

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

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

```

标记之间放置的空间量与 Java 编译器无关。 在 Java 源代码中应始终使用空格。

## Java 标识符

标识符是变量，方法，类或参数的名称。 标识符可以包含字母数字字符，下划线和美元符号（$）。 以数字开头的变量名称是错误的。 名称中不允许使用空格。

标识符区分大小写。 这意味着`Name`，`name`或`NAME`引用了三个不同的变量。 标识符也不能与语言关键字匹配。

还有一些与标识符命名有关的约定。 名称应具有描述性。 我们不应该将隐名用作标识符。 如果名称由多个单词组成，则随后的每个单词均大写。

以下是有效的 Java 标识符。

```java
String name23;
int _col;
short car_age;

```

以下是无效的 Java 标识符。

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

```

以下程序演示了变量名区分大小写。 尽管语言允许这样做，但不建议这样做。

`com/zetcode/CaseSensitiveIdentifiers.java`

```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);
    }
}

```

在 Java 中， `Name`和`name`是两个不同的标识符。 而在 Visual Basic 中，他们是两个相同的标识符，因为 Visual Basic 的变量名不区分大小写。

```java
$ java com.zetcode.CaseSensitiveIdentifiers 
Robert
Julia

```

## Java 字面值

字面值是类型的特定值的字面值表示。 字面值类型包括布尔值，整数，浮点数，字符串，空值或字符。 从技术上讲，字面值将在编译时分配一个值，而变量将在运行时分配。

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

```

在这里，我们为`age`和`nationality`两个变量分配了两个字面值。 数字 29 和字符串`"Hungarian"`是字面值。

`com/zetcode/Literals.java`

```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
$ 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 运算符的部分列表。 我们将在本教程的后面部分讨论运算符。

## Java 分隔符

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

```java
[ ]   ( )   { }   ,   ;   .   "

```

```java
String language = "Java";

```

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

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

```

括号（圆括号）始终位于方法名称之后。 在括号之间，我们声明输入参数。 即使该方法不带任何参数，也会出现括号。 `System.out.println()`方法采用一个参数，即字符串值。 点字符将类名（`System`）与成员（`out`）和方法名称（`println()`）分开。

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

```

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

```java
int a, b, c;

```

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

## Java 关键字

关键字是 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`

```java
package com.zetcode;

public class Keywords {

    public static void main(String[] args) {

        for (int i = 0; i <= 5; i++) {

            System.out.println(i);
        }
    }
}

```

`package`，`public`，`class`，`static`，`void`，`int`和`for`标记是 Java 关键字。

## Java 约定

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

*   类名以大写字母开头。
*   方法名称以小写字母开头。
*   同时使用`public`关键字和`static`关键字之前。
*   `main()`方法的参数名称称为`args`。
*   常量以大写形式编写。
*   标识符名称中的每个后续单词均以大写字母开头。

在 Java 教程的这一部分中，我们介绍了 Java 语言的一些基本词汇。