Java基础语法

基本语法

第一个Java程序

1
2
3
4
5
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}

大小写敏感

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

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

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

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

1
public class HelloWorld {

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

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

1
2
3
public class ImoocStudent {
...
}

主方法

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

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

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

而在主方法内部(指的是 main() 后面一对大括号中间包含的内容)我们可以定义一些指令,例如
1
System.out.println("Hello World!");

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

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

1
2
3
4
5
6
public class ImoocStudent {
public static void main(String[] args) {
System.out.println("第一行输出");
System.out.println("第二行输出");
}
}

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

源代码文件

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

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

Java标识符

概念

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

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

命名规范

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

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

  • $name
  • _World
    以下不合法的标识符命名实例:
  • ¥color
  • 12name
  • final

Java 注释和空行

概念

注释

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

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

空行

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

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

1
2
3
4
5
6
7
8
9
class HelloImooc {

public static void main(String[] args) {
System.out.println("你好慕课网");

System.out.println("Hello, Imooc!");
}

}

注释的分类

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

  • 单行注释
  • 多行注释
  • 文档注释

单行注释

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

1
// 被注释的内容

在 Java 代码中,它是这样的:
1
2
3
4
5
6
7
public class HelloImooc {
// 定义入口方法
public static void main(String[] args) {
// 打印输出:你好
System.out.println("你好");
}
}

多行注释

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

1
2
3
4
5
/*
被注释的第一行内容
被注释的第二行内容
被注释的第三行内容
*/

当我们在开发时为了方便调试,需要注释一段多行的逻辑代码,可以使用多行注释:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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) {
}
}

文档注释

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
* 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 这样的命令来自动创建文档。另外通常在程序开头加入作者,时间,版本,要实现的功能等内容注释,方便程序的维护以及程序员的交流。

关键字和保留字

概念

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

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

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

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

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 |用在循环结构中|