Java 基础语法

本小节我们将介绍 Java 语言的基础语法,包括我们在编写第一个 Java 程序时已接触过的类、主方法的概念,以及在编程中给源代码文件和类起名字的时候应该注意什么,什么样的名字是可以使用的,什么样的名字是不可以使用的,还有如何为代码添加注释等内容。

只有掌握了这些最基础的知识,才能减少后续学习中的困扰,避免踩坑。

1. 基本语法

我们在前面完成了第一个 Java 程序,我们现在来回顾一下:

实例演示
预览 复制
复制成功!
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}
运行案例 点击 "运行案例" 可查看在线运行效果

整个程序看似简单,但包含很多基础的知识点。下面我们将围绕这个程序来介绍几部分内容:

  1. 大小写敏感
  2. 主方法
  3. 源代码文件

1.1 大小写敏感

Java 语言是大小写敏感的,这个知识点很好理解:所有的命名都区分大小写 (文件名、类名、方法名等等)。

例如:HelloWorldhelloWorld 是不同的;Hello.javaHellO.java 也是不同的。

1.2 类

Java 是纯面向对象的编程语言,因此 (class) 是一个程序的基本单位。所有的 Java 程序想要运行,都离不开类。

我们可以来看看代码的第一行:

public class HelloWorld {

其中,public 是一个关键字,它属于访问控制符,它表示这个类是公开的。关于什么是访问控制符,在初学阶段不必理解。

紧接着的 class 也是一个关键字用于声明类, HelloWorld 是类名,类名的首字母要大写。如果类名由多个单词组成,那么每个单词的首字母都要大写。例如,我们可以这样声明一个表示慕课网学生的类:

public class ImoocStudent {
  	...
}

1.3 主方法

什么是主方法呢?请观察示例代码的 class 内部(指的是类名 HelloWorld 后面用大括号 {} 包含的内容),这个方法被称为主方法。每个类只能拥有一个主方法。

需要特别注意的是:所有的 Java 程序都从主方法开始执行。 以下的写法是固定的,所以你暂时无需深究:

public static void main(String[] args) {
    ...
}

而在主方法内部(指的是 main() 后面一对大括号中间包含的内容)我们可以定义一些指令,例如:

System.out.println("Hello World!");

我们称这个指令为输出语句,它的作用是向屏幕输出 Hello World! 。输出语句在后面会经常用到。

我们也可以在主方法内部多次调用输出语句,以输出多条内容:

实例演示
预览 复制
复制成功!
public class ImoocStudent {
  	public static void main(String[] args) {
		System.out.println("第一行输出:慕课网学生");
      	System.out.println("第二行输出:快来慕课学编程");
    }
}
运行案例 点击 "运行案例" 可查看在线运行效果

另外补充一点,类的内部不仅可以包含一个主方法,也可以包含多个方法。在学习方法的概念之前,我们将主要在主方法中编写示例代码。

1.4 源代码文件

既然源代码需要提供给计算机执行,我们就要将源代码以文件的形式保存在计算机的磁盘上。

需要注意的是:源代码文件的命名必须与类名相同,且后缀名为.java。例如:HelloWorld 类对应的源代码文件名应该为 HelloWorld.java,而 ImmocStudent.java 源代码文件的对应类名为 ImmocStudent

2. Java 标识符

2.1 概念

在计算机编程语言中,标识符是开发者编程时使用的名字,用于给变量、常量、函数、语句块等命名,以建立起名称与使用之间的关系。标识符通常由字母和数字以及其它字符构成。

在 Java 中,标识符通常用来给类、对象、变量、方法、接口、自定义数据类型命名。

2.2 命名规范

标识符都以字母(A-Z 或者 a-z),美元符号($)或下划线(_)开始;首字母后可以是字母、数字、下划线的任意组合;正如我们前面所提到的,标识符是大小写敏感的;需要特别注意的是,Java 中的关键字(本节最后将会介绍)不能被用作标识符。

以下是合法的标识符命名实例:

  • $name

  • _World

  • Imooc

  • imooc1

以下不合法的标识符命名实例:

  • ¥color
  • 12name
  • *abc
  • final

3. Java 注释和空行

3.1 概念

3.1.1 注释

注释是一种便于给人阅读程序的文本,它不会被编译器解析。养成多些注释的习惯,不但有助于自己理解程序,也有助于别人更好地理解自己的程序。在团队协作的项目中,代码注释更加重要,代码的研发人员通过编写通俗易懂的注释,可以极大地降低协作成员之间沟通成本。

下图灰色部分为 Java 源码中的注释:

3.1.2 空行

空行就是空白行,与注释一样,同样不会被编译器解析。

适当地使用空行,可以让代码的结构看起来更好看,例如,下面程序中第 2 行、第 5 行和第 8 行都是空行:

1 class HelloImooc {
2    
3    public static void main(String[] args) {
4    	 System.out.println("你好慕课网");
5        
6        System.out.println("Hello, Imooc!");
7   }
8    
9}

3.2 注释的分类

Java 语言提供了三种类别的注释:

  1. 单行注释
  2. 多行注释
  3. 文档注释

3.2.1 单行注释

单行注释用于注释一行文本,它以双斜线开始,后面跟上要注释的内容,其写法为:

// 被注释的内容

在 Java 代码中,它是这样的:

实例演示
预览 复制
复制成功!
public class HelloImooc {
  	// 定义入口方法
  	public static void main(String[] args) {
      	// 打印输出:你好慕课网
      	System.out.println("你好慕课网");
    }
}
运行案例 点击 "运行案例" 可查看在线运行效果

3.2.2 多行注释

多行注释用于注释多行文本,它以 /* 开头,以 */ 结尾,其写法为:

/*
被注释的第一行内容
被注释的第二行内容
被注释的第三行内容
*/

当我们在开发时为了方便调试,需要注释一段多行的逻辑代码,可以使用多行注释:

实例演示
预览 复制
复制成功!
public class Dog {
  	private int age;
 	private String name;
  
  	/*
  	多行注释,注释了这段代码
  	public Dog (String name, int age) {
  		this.name = name;
      	this.age = age;
    }
    */
    public static void main(String[] args) {
    }
}
运行案例 点击 "运行案例" 可查看在线运行效果

3.2.3 文档注释

Java 中还有一种特殊的多行注释 —— 文档注释,它以 /** 开头,以 */ 结尾,如果有多行,则每行都以 * 开头,其在代码中的写法为:

实例演示
预览 复制
复制成功!
/**
 * HelloWorld 类
 * 它是我的第一个 Java 程序
 * @Author: Colorful
 * @Date: 2020/02/02
 */
public class HelloWorld {
    /**
     * 主方法,向屏幕打印 Hello World!
     * @param args 主方法的固定参数
     */
  	public static void main(String[] args) {
      	System.out.println("Hello World!");
    }
}
运行案例 点击 "运行案例" 可查看在线运行效果

这种特殊的多行注释需要写在类和方法的定义处,可以使用 javadoc 这样的命令来自动创建文档。另外通常在程序开头加入作者,时间,版本,要实现的功能等内容注释,方便程序的维护以及程序员的交流。

4 关键字和保留字

4.1 概念

关键字 (Keyword) 是 Java 语言中的特殊标记。它已经被语言本身预先使用,因此我们不能使用关键字作为我们标识符的命名。

例如 Java 基本类型的 intboolean,流程控制语句中的 iffor,访问修饰符 public,以及一些用于声明和定义 Java 类、包、接口的 classpackageinterface

而保留字 (Reserved word) 可能是未来的关键字,也就是说可能在未来的版本中,Java 语言作为特殊标记。

Tips:无论是关键字还是保留字,我们都要记住:不能使用它们作为我们的代码中的标识符。

4.2 Java 中有哪些关键字

关键字一律用小写字母标识,Java 语言中定义了如下表所示的关键字:

关键字 说明
abstract 表明类或者成员方法具有抽象属性
assert 断言,常用于程序的调试
boolean 基本数据类型:布尔类型
break 提前跳出一个块
byte 基本数据类型,字节类型
case 用在 switch 语句之中,表示其中的一个分支
catch 用在异常处理中,用来捕捉异常
char 基本数据类型:字符类型
class 用于声明一个类
const 保留关键字
continue 回到一个块的开始处
default 默认,用在 switch 语句中,表明一个默认的分支;JDK1.8 以后也作用于声明接口函数的默认实现
do 用在 do-while 循环结构中
double 基本数据类型:双精度浮点数类型
else 用在条件语句中,表明当条件不成立时的分支
enum 枚举
extends 表明一个类型是另一个类型的子类型。对于类,可以是另一个类或者抽象类;对于接口,可以是另一个接口
final 用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变,用来定义常量
finally 用于处理异常情况,用来声明一个基本肯定会被执行到的语句块
float 基本数据类型之一,单精度浮点数类型
for 一种循环结构的引导词
goto 保留关键字,没有具体含义
if 条件语句的引导词
implements 表明一个类实现了给定的接口
import 表明要访问指定的类或包
instanceof 用来测试一个对象是否是指定类型的实例对象
int 基本数据类型之一,整数类型
interface 接口
long 基本数据类型之一,长整数类型
native 用来声明一个方法是由与计算机相关的语言(如 C/C++/FORTRAN 语言)实现的
new 用来创建新实例对象
package
private 一种访问控制方式:私用模式
protected 一种访问控制方式:保护模式
public 一种访问控制方式:共用模式
return 从成员方法中返回数据
short 基本数据类型之一,短整数类型
static 表明具有静态属性
strictfp 用来声明 FP_strict(单精度或双精度浮点数)表达式遵循 IEEE 754 算术规范
super 表明当前对象的父类型的引用或者父类型的构造方法
switch 分支语句结构的引导词
synchronized 表明一段代码需要同步执行
this 指向当前实例对象的引用
throw 抛出一个异常
throws 声明在当前定义的成员方法中所有需要抛出的异常
transient 声明不用序列化的成员域
try 尝试一个可能抛出异常的程序块
void 声明当前成员方法没有返回值
volatile 表明两个或者多个变量必须同步地发生变化
while 用在循环结构中

5. 小结

本小节我们学习了 Java 的基础语法。我们知道了 Java 语言区分大小写,类是一个程序的基本单位,所以说我们要编写 Java 代码,就要知道如何声明一个类,而类中的主方法是一个程序执行的起点。标识符是我们程序员在编程时所使用的名字,当我们为标识符命名时,一定不能使用 Java 中的关键字。理解了注释的概念和分类,另外也建议大家在编写代码的过程中多写注释,在学习别人代码的过程中多看注释。我们也将在后面的示例代码中加入大量的注释来帮助你理解程序。