Java 基礎(chǔ)語(yǔ)法
本小節(jié)我們將介紹 Java
語(yǔ)言的基礎(chǔ)語(yǔ)法,包括我們?cè)诰帉懙谝粋€(gè) Java
程序時(shí)已接觸過的類、主方法的概念,以及在編程中給源代碼文件和類起名字的時(shí)候應(yīng)該注意什么,什么樣的名字是可以使用的,什么樣的名字是不可以使用的,還有如何為代碼添加注釋等內(nèi)容。
只有掌握了這些最基礎(chǔ)的知識(shí),才能減少后續(xù)學(xué)習(xí)中的困擾,避免踩坑。
1. 基本語(yǔ)法
我們?cè)谇懊嫱瓿闪说谝粋€(gè) Java
程序,我們現(xiàn)在來回顧一下:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
整個(gè)程序看似簡(jiǎn)單,但包含很多基礎(chǔ)的知識(shí)點(diǎn)。下面我們將圍繞這個(gè)程序來介紹幾部分內(nèi)容:
- 大小寫敏感
- 類
- 主方法
- 源代碼文件
1.1 大小寫敏感
Java 語(yǔ)言是大小寫敏感的,這個(gè)知識(shí)點(diǎn)很好理解:所有的命名都區(qū)分大小寫 (文件名、類名、方法名等等)。
例如:HelloWorld
與 helloWorld
是不同的;Hello.java
和 HellO.java
也是不同的。
1.2 類
Java 是純面向?qū)ο蟮木幊陶Z(yǔ)言,因此類 (class) 是一個(gè)程序的基本單位。所有的 Java 程序想要運(yùn)行,都離不開類。
我們可以來看看代碼的第一行:
public class HelloWorld {
其中,public
是一個(gè)關(guān)鍵字,它屬于訪問控制符,它表示這個(gè)類是公開的。關(guān)于什么是訪問控制符,在初學(xué)階段不必理解。
緊接著的 class
也是一個(gè)關(guān)鍵字用于聲明類, HelloWorld
是類名,類名的首字母要大寫。如果類名由多個(gè)單詞組成,那么每個(gè)單詞的首字母都要大寫。例如,我們可以這樣聲明一個(gè)表示慕課網(wǎng)學(xué)生的類:
public class ImoocStudent {
...
}
1.3 主方法
什么是主方法呢?請(qǐng)觀察示例代碼的 class
內(nèi)部(指的是類名 HelloWorld
后面用大括號(hào) {}
包含的內(nèi)容),這個(gè)方法被稱為主方法。每個(gè)類只能擁有一個(gè)主方法。
需要特別注意的是:所有的 Java 程序都從主方法開始執(zhí)行。 以下的寫法是固定的,所以你暫時(shí)無需深究:
public static void main(String[] args) {
...
}
而在主方法內(nèi)部(指的是 main()
后面一對(duì)大括號(hào)中間包含的內(nèi)容)我們可以定義一些指令,例如:
System.out.println("Hello World!");
我們稱這個(gè)指令為輸出語(yǔ)句,它的作用是向屏幕輸出 Hello World!
。輸出語(yǔ)句在后面會(huì)經(jīng)常用到。
我們也可以在主方法內(nèi)部多次調(diào)用輸出語(yǔ)句,以輸出多條內(nèi)容:
public class ImoocStudent {
public static void main(String[] args) {
System.out.println("第一行輸出:慕課網(wǎng)學(xué)生");
System.out.println("第二行輸出:快來慕課學(xué)編程");
}
}
另外補(bǔ)充一點(diǎn),類的內(nèi)部不僅可以包含一個(gè)主方法,也可以包含多個(gè)方法。在學(xué)習(xí)方法的概念之前,我們將主要在主方法中編寫示例代碼。
1.4 源代碼文件
既然源代碼需要提供給計(jì)算機(jī)執(zhí)行,我們就要將源代碼以文件的形式保存在計(jì)算機(jī)的磁盤上。
需要注意的是:源代碼文件的命名必須與類名相同,且后綴名為.java
。例如:HelloWorld
類對(duì)應(yīng)的源代碼文件名應(yīng)該為 HelloWorld.java
,而 ImmocStudent.java
源代碼文件的對(duì)應(yīng)類名為 ImmocStudent
。
2. Java 標(biāo)識(shí)符
2.1 概念
在計(jì)算機(jī)編程語(yǔ)言中,標(biāo)識(shí)符是開發(fā)者編程時(shí)使用的名字,用于給變量、常量、函數(shù)、語(yǔ)句塊等命名,以建立起名稱與使用之間的關(guān)系。標(biāo)識(shí)符通常由字母和數(shù)字以及其它字符構(gòu)成。
在 Java 中,標(biāo)識(shí)符通常用來給類、對(duì)象、變量、方法、接口、自定義數(shù)據(jù)類型命名。
2.2 命名規(guī)范
標(biāo)識(shí)符都以字母(A-Z 或者 a-z),美元符號(hào)($)或下劃線(_)開始;首字母后可以是字母、數(shù)字、下劃線的任意組合;正如我們前面所提到的,標(biāo)識(shí)符是大小寫敏感的;需要特別注意的是,Java 中的關(guān)鍵字(本節(jié)最后將會(huì)介紹)不能被用作標(biāo)識(shí)符。
以下是合法的標(biāo)識(shí)符命名實(shí)例:
-
$name
-
_World
-
Imooc
-
imooc1
以下不合法的標(biāo)識(shí)符命名實(shí)例:
- ¥color
- 12name
- *abc
- final
3. Java 注釋和空行
3.1 概念
3.1.1 注釋
注釋是一種便于給人閱讀程序的文本,它不會(huì)被編譯器解析。養(yǎng)成多些注釋的習(xí)慣,不但有助于自己理解程序,也有助于別人更好地理解自己的程序。在團(tuán)隊(duì)協(xié)作的項(xiàng)目中,代碼注釋更加重要,代碼的研發(fā)人員通過編寫通俗易懂的注釋,可以極大地降低協(xié)作成員之間溝通成本。
下圖灰色部分為 Java 源碼中的注釋:

3.1.2 空行
空行就是空白行,與注釋一樣,同樣不會(huì)被編譯器解析。
適當(dāng)?shù)厥褂每招?,可以讓代碼的結(jié)構(gòu)看起來更好看,例如,下面程序中第 2 行、第 5 行和第 8 行都是空行:
1 class HelloImooc {
2
3 public static void main(String[] args) {
4 System.out.println("你好慕課網(wǎng)");
5
6 System.out.println("Hello, Imooc!");
7 }
8
9}
3.2 注釋的分類
Java 語(yǔ)言提供了三種類別的注釋:
- 單行注釋
- 多行注釋
- 文檔注釋
3.2.1 單行注釋
單行注釋用于注釋一行文本,它以雙斜線開始,后面跟上要注釋的內(nèi)容,其寫法為:
// 被注釋的內(nèi)容
在 Java 代碼中,它是這樣的:
public class HelloImooc {
// 定義入口方法
public static void main(String[] args) {
// 打印輸出:你好慕課網(wǎng)
System.out.println("你好慕課網(wǎng)");
}
}
3.2.2 多行注釋
多行注釋用于注釋多行文本,它以 /*
開頭,以 */
結(jié)尾,其寫法為:
/*
被注釋的第一行內(nèi)容
被注釋的第二行內(nèi)容
被注釋的第三行內(nèi)容
*/
當(dāng)我們?cè)陂_發(fā)時(shí)為了方便調(diào)試,需要注釋一段多行的邏輯代碼,可以使用多行注釋:
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 中還有一種特殊的多行注釋 —— 文檔注釋,它以 /**
開頭,以 */
結(jié)尾,如果有多行,則每行都以 *
開頭,其在代碼中的寫法為:
/**
* HelloWorld 類
* 它是我的第一個(gè) Java 程序
* @Author: Colorful
* @Date: 2020/02/02
*/
public class HelloWorld {
/**
* 主方法,向屏幕打印 Hello World!
* @param args 主方法的固定參數(shù)
*/
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
這種特殊的多行注釋需要寫在類和方法的定義處,可以使用 javadoc
這樣的命令來自動(dòng)創(chuàng)建文檔。另外通常在程序開頭加入作者,時(shí)間,版本,要實(shí)現(xiàn)的功能等內(nèi)容注釋,方便程序的維護(hù)以及程序員的交流。
4 關(guān)鍵字和保留字
4.1 概念
關(guān)鍵字 (Keyword
) 是 Java 語(yǔ)言中的特殊標(biāo)記。它已經(jīng)被語(yǔ)言本身預(yù)先使用,因此我們不能使用關(guān)鍵字作為我們標(biāo)識(shí)符的命名。
例如 Java 基本類型的 int
、boolean
,流程控制語(yǔ)句中的 if
、for
,訪問修飾符 public
,以及一些用于聲明和定義 Java 類、包、接口的 class
、package
、interface
。
而保留字 (Reserved word
) 可能是未來的關(guān)鍵字,也就是說可能在未來的版本中,Java 語(yǔ)言作為特殊標(biāo)記。
Tips:無論是關(guān)鍵字還是保留字,我們都要記住:不能使用它們作為我們的代碼中的標(biāo)識(shí)符。
4.2 Java 中有哪些關(guān)鍵字
關(guān)鍵字一律用小寫字母標(biāo)識(shí),Java 語(yǔ)言中定義了如下表所示的關(guān)鍵字:
關(guān)鍵字 | 說明 |
---|---|
abstract | 表明類或者成員方法具有抽象屬性 |
assert | 斷言,常用于程序的調(diào)試 |
boolean | 基本數(shù)據(jù)類型:布爾類型 |
break | 提前跳出一個(gè)塊 |
byte | 基本數(shù)據(jù)類型,字節(jié)類型 |
case | 用在 switch 語(yǔ)句之中,表示其中的一個(gè)分支 |
catch | 用在異常處理中,用來捕捉異常 |
char | 基本數(shù)據(jù)類型:字符類型 |
class | 用于聲明一個(gè)類 |
const | 保留關(guān)鍵字 |
continue | 回到一個(gè)塊的開始處 |
default | 默認(rèn),用在 switch 語(yǔ)句中,表明一個(gè)默認(rèn)的分支;JDK1.8 以后也作用于聲明接口函數(shù)的默認(rèn)實(shí)現(xiàn) |
do | 用在 do-while 循環(huán)結(jié)構(gòu)中 |
double | 基本數(shù)據(jù)類型:雙精度浮點(diǎn)數(shù)類型 |
else | 用在條件語(yǔ)句中,表明當(dāng)條件不成立時(shí)的分支 |
enum | 枚舉 |
extends | 表明一個(gè)類型是另一個(gè)類型的子類型。對(duì)于類,可以是另一個(gè)類或者抽象類;對(duì)于接口,可以是另一個(gè)接口 |
final | 用來說明最終屬性,表明一個(gè)類不能派生出子類,或者成員方法不能被覆蓋,或者成員域的值不能被改變,用來定義常量 |
finally | 用于處理異常情況,用來聲明一個(gè)基本肯定會(huì)被執(zhí)行到的語(yǔ)句塊 |
float | 基本數(shù)據(jù)類型之一,單精度浮點(diǎn)數(shù)類型 |
for | 一種循環(huán)結(jié)構(gòu)的引導(dǎo)詞 |
goto | 保留關(guān)鍵字,沒有具體含義 |
if | 條件語(yǔ)句的引導(dǎo)詞 |
implements | 表明一個(gè)類實(shí)現(xiàn)了給定的接口 |
import | 表明要訪問指定的類或包 |
instanceof | 用來測(cè)試一個(gè)對(duì)象是否是指定類型的實(shí)例對(duì)象 |
int | 基本數(shù)據(jù)類型之一,整數(shù)類型 |
interface | 接口 |
long | 基本數(shù)據(jù)類型之一,長(zhǎng)整數(shù)類型 |
native | 用來聲明一個(gè)方法是由與計(jì)算機(jī)相關(guān)的語(yǔ)言(如 C/C++/FORTRAN 語(yǔ)言)實(shí)現(xiàn)的 |
new | 用來創(chuàng)建新實(shí)例對(duì)象 |
package | 包 |
private | 一種訪問控制方式:私用模式 |
protected | 一種訪問控制方式:保護(hù)模式 |
public | 一種訪問控制方式:共用模式 |
return | 從成員方法中返回?cái)?shù)據(jù) |
short | 基本數(shù)據(jù)類型之一,短整數(shù)類型 |
static | 表明具有靜態(tài)屬性 |
strictfp | 用來聲明 FP_strict(單精度或雙精度浮點(diǎn)數(shù))表達(dá)式遵循 IEEE 754 算術(shù)規(guī)范 |
super | 表明當(dāng)前對(duì)象的父類型的引用或者父類型的構(gòu)造方法 |
switch | 分支語(yǔ)句結(jié)構(gòu)的引導(dǎo)詞 |
synchronized | 表明一段代碼需要同步執(zhí)行 |
this | 指向當(dāng)前實(shí)例對(duì)象的引用 |
throw | 拋出一個(gè)異常 |
throws | 聲明在當(dāng)前定義的成員方法中所有需要拋出的異常 |
transient | 聲明不用序列化的成員域 |
try | 嘗試一個(gè)可能拋出異常的程序塊 |
void | 聲明當(dāng)前成員方法沒有返回值 |
volatile | 表明兩個(gè)或者多個(gè)變量必須同步地發(fā)生變化 |
while | 用在循環(huán)結(jié)構(gòu)中 |
5. 小結(jié)
本小節(jié)我們學(xué)習(xí)了 Java 的基礎(chǔ)語(yǔ)法。我們知道了 Java 語(yǔ)言區(qū)分大小寫,類是一個(gè)程序的基本單位,所以說我們要編寫 Java 代碼,就要知道如何聲明一個(gè)類,而類中的主方法是一個(gè)程序執(zhí)行的起點(diǎn)。標(biāo)識(shí)符是我們程序員在編程時(shí)所使用的名字,當(dāng)我們?yōu)闃?biāo)識(shí)符命名時(shí),一定不能使用 Java 中的關(guān)鍵字。理解了注釋的概念和分類,另外也建議大家在編寫代碼的過程中多寫注釋,在學(xué)習(xí)別人代碼的過程中多看注釋。我們也將在后面的示例代碼中加入大量的注釋來幫助你理解程序。