Java語言由語法規則和類庫兩部分組成,其中語法規則確定了Java程式的書寫規範,學習好語法規則是Java語言,也是所有程式語言的基本功。本文主要向大家簡單介紹一下Java的語法規則。 Java語言與C/C++語言有著緊密的聯絡,Java中的許多術語來自於C++,起語法也來自於C++。因此Java的語法和c++的語法計劃一模一樣。下面簡單介紹一下Java的具體語法。
一、Java的詞法
1、識別符號
識別符號是類、變數和方法等的名字,作用是讓編譯器能夠識別它們。在Java語言中,識別符號可以包含數字、字母、下劃線(_)和美圓符號($),但是不能以數字作為開頭。與C/C++語言不同的是,Java語言還可以將一些非拉丁字母包含在識別符號中,這是因為Java語言使用的是Unicode字元,所有的十六進位制00C0以上的Unicode字元都可以用在識別符號中。但是Java語言的關鍵字是不能用來作為識別符號的。
我們在使用識別符號的時候應該儘量表達所要表示的類、變數、方法等的含義。另外,識別符號中可以使用下劃線,我們應該充分利用這一點以提高程式的可讀性。
2、關鍵字
以下是Java的全部關鍵字:
abstract double int strictfp** boolean else interface super break extends long switch byte final native synchronized case finally new this catch float package throw char for private throws class goto* protected transient const* if public try continue implements return void default import short volatile do instanceof static while * 尚未使用的關鍵字 ** 為Java 2增加的關鍵字
3、註釋
Java有三種形式的註釋:
第一種是C語言的傳統註釋方式,即將“/*”和“*/”之間的文字都視為註釋,這種註釋可以跨越多行。
第二種是C++風格的註釋,即將“//”之後直到行尾的文字都視為註釋,這種註釋只能包含一行。
第三種是Java新增加的註釋方式,即將“/**”和“*/”之間的文字都視為註釋,這種註釋也可以誇耀多行。注意,這種註釋方式生成的註釋將作為Javadoc文件儲存。
二、操作符
1、算術操作符
操作符 | 用途 | 優先順序 | 結合性 |
++,-- | 自動遞增,自動遞減 | 2(僅次於括號) | 從右到左 |
+,- | 一元加,一元減 | 2 | 從右到左 |
*,/ | 乘,除 | 3 | 從左到右 |
% | 取餘(求模) | 3 | 從左到右 |
+,- | 加,減 | 4 | 從左到右 |
2、布林運算與關係運算符
操作符 | 用途 | 優先順序 | 結合性 |
>,<,>=,<= | 測試相對大小 | 6 | 從左到右 |
== | 測試相等性 | 7 | 從左到右 |
!= | 測試不等性 | 7 | 從左到右 |
?: | 根據第一個運算元返回後兩個運算元之一 | 13 | 從左到右 |
! | 非 | 2 | 從右到左 |
& | 布林與 | 8 | 從左到右 |
^ | 異或 | 9 | 從左到右 |
| | 布林或 | 10 | 從左到右 |
&& | 條件與 | 11 | 從左到右 |
|| | 條件或 | 12 | 從左到右 |
3、位操作符
操作符 | 用途 | 優先順序 | 結合性 |
~ | 非(位求補) | 2 | 從右到左 |
<<,>> | 左移,右移 | 5 | 從左到右 |
>>> | 當作無符號右移 | 5 | 從左到右 |
& | 位和 | 8 | 從左到右 |
^ | 位異或 | 9 | 從左到右 |
| | 位或 | 10 | 從左到右 |
4、賦值操作符
操作符 | 用途 | 優先順序 | 結合性 |
= | 賦值 | 14 | 從右到左 |
*= | 操作同時賦值 | 14 | 從右到左 |
/= | 操作同時賦值 | 14 | 從右到左 |
%= | 操作同時賦值 | 14 | 從右到左 |
-= | 操作同時賦值 | 14 | 從右到左 |
+= | 操作同時賦值 | 14 | 從右到左 |
>>= | 操作同時賦值 | 14 | 從右到左 |
<<= | 操作同時賦值 | 14 | 從右到左 |
>>>= | 操作同時賦值 | 14 | 從右到左 |
^= | 操作同時賦值 | 14 | 從右到左 |
|= | 操作同時賦值 | 14 | 從右到左 |
&= | 操作同時賦值 | 14 | 從右到左 |
5、特殊操作符
cast操作符將一種資料型別轉換成為另一種資料型別,cast應寫成把要校正運算元的型別名放在括號中。
例如:
int i; long l; l=7876547; i=(int)l;
如果給高精度的變數賦予一個低精度值,則不需校正。型別校正操作符的優先順序為2,結合性為從右到左結合。
將以上講到的操作符的優先順序總結如下:
優先順序 | 運算子 | 結合順序 |
1 | []陣列運算 .點運算子 ()呼叫方法 | 從左到右 |
2 | ! ~ ++ -- +(一元加) -(一元減) ()強制型別轉換 new | 從右到左 |
3 | * / % | 從左到右 |
4 | +(二元加) -(二元減) | 從左到右 |
5 | >> << >>> | 從左到右 |
6 | < <= > >= instanceof | 從左到右 |
7 | == != | 從左到右 |
8 | & | 從左到右 |
9 | ^ | 從左到右 |
10 | | | 從左到右 |
11 | && | 從左到右 |
12 | || | 從左到右 |
13 | ?: | 從左到右 |
14 | = += -= *= /= %= &= |= ^= <<= >>= >>>= | 從右到左 |
三、常量
1、整型常量
在Java語言中,整型常量有三種形式,它們分別是:十進位制、八進位制、十六進位制。需要注意的是十進位制數不能以0開頭,這是因為八進位制的數是以0開頭的,而十六進位制數以0x或0X開頭。
2、浮點型常量
浮點數只能表示十進位制數。浮點數有兩種表示方法,即標準表示法和科學記數法。浮點數又分為單精度數和雙精度數。
3、布林型常量
布林型常量有兩個值:ture(或TURE)和false(或FALSE)它們分別表示真和假,這兩個值用來表示事物的狀態,它們必居其一。通過測量布林值可以判斷是否執行某個步驟。
4、字元型常量
字元型常量是一個單一的字元,其形式是由兩個單引號引起來的一個字元。但是兩個單引號引起來的不能是單引號和反斜槓,即‘’和‘’是不正確的寫法。
大家一定要記住,Java語言中的字元是16位的Unicode字元,這與C/C++等語言是不一樣的。
字串常量
字串常量是由雙引號引起來的一系列字元,與C/C++語言中不同的是,Java語言中的字串不是通過字元陣列來實現的,而是通過字串類(即String類)來實現的。
四、變數和資料型別
在Java中,資料的型別可以分為四種:基本資料型別、陣列型別、類和介面型別。任何資料都一定是上述資料型別的'一種。
其中基本資料型別可以分為四大類:布林型、字元型、整數型和浮點型。這些型別的資料與前面介紹的常量的型別基本相同,在此不再多說。下面將整數型和浮點型變數的取值範圍列出:
表一、
型別 | 寬度 | 取值範圍 |
byte | 8位 | -256到256 |
short | 16位 | -32768到32767 |
int | 32位 | -2147483648到2147483647 |
long | 64位 | -9223372036854775808到9223372036854775807 |
表二、
進位制 | 整數 | 長整數 |
十進位制 | 最大正整數 | 2147483647(2的31次方減1) 923372036854775807L(2的63次方減1) |
八進位制 | 最大正整數 | 077777777777(2的31次方減1) 07777777777777777777L(2的63次方減1) |
二進位制 | 最小負整數 | 020000000000(-2的31次方) 04000000000000000000L(-2的63次方) |
十六進位制 | 最大正整數 | 0x7fffffff(2的31次方減1) 0x7fffffffffffffffL(2的63次方減1) |
十六進位制 | 最小負整數 | 0x80000000(-2的31次方) 0x8000000000000000L(-2的63次方) |
浮點數能表示的數值從小到大分別是:負無窮大、負有限值、負零、正零、正有限值及正無窮大。其中正零和負零在進行數值比較的時候是相等的,但仍有辦法分辨這兩個值,例如在進行1.0/0.0的時候會得到正無窮大的結果。其它非零非無窮大的有限值是以s*m*(2^e)來表示的,s和m的取值範圍見下表:
表三、
型別 | s | m |
float +1或-1 | 小於2的24次方的正整數 | 149到104的整數 |
double +1或-1 | 小於2的53次方的正整數 | 1045到1000的整數 |
與C/C++語言中不同的是,在Java語言中,所有的基本資料型別都有預設值,就是說當我們宣告一個變數時,即使我們沒有對它賦值,它的值也是一定的,而不像在C/C++中那樣是不可預測的。
五、Java與C/C++的比較
由於Java的語法直接來源於C/C++,所以Java的程式控制語句與C/C++一模一樣,在此不再多說。以下重點介紹一下Java與C/C++的不同。
指標
大家在使用C語言程式設計的時候想必都曾經因為指標的複雜計算而煩惱,在C/C++語言程式設計過程中,指標可能引起許多錯誤,這些複雜的指標演算法所產生的錯誤常常讓人迷惑不解,導致C/C++程式設計師在此浪費了大量的時間。考慮到這種原因,Java中取消了指標。指標的功能由參考(reference)所取代,這使得Java中對複雜資料結構的實現更加容易,因為用物件和物件陣列實現複雜的資料結構更可靠。
函式
在Java中沒有C/C++中應用廣泛的函式,C/C++中通過函式實現的功能在Java中都是通過類和方法來實現的。
繼承
C++支援多重繼承,這是一個從多個父類中派生一個類的有效辦法,但這種派生很複雜,也很容易產生問題。因此,Java中沒有采用多重繼承,但Java的Objective C協議介面能完成C++中多重繼承的所有功能。
goto語句
大家知道,在使用高階語言程式設計時過多的使用goto語句會使程式變得十分混亂,因此Java中也沒有使用goto語句。但是不可否認,當程式比較容易控制的時候,適當使用goto語句能使程式的執行更快捷,因此Java中使用了多重break和continue語句(允許break和continue語句使用標籤)實現C++種goto語句的功能。
聯合和結構
在C++中有三種資料結構:聯合、結構和類;Java中只有類,它可以實現上述三者的功能。
字串
在C/C++中,字串是通過字元陣列實現的,但是由於陣列的空間不是動態分配的,這容易出現越界錯誤,例如:常有預先設定的字元陣列不能容納後輸入的字串。在Java中,字串是一類特定的物件,這使得字串更具有一致性和可預見性。
Typedef、Define和前處理器
Java中不需要#define語句、前處理器或者typedef,但需要標頭檔案。在Java中一個類的資訊必須包含在一個檔案中,而C/C++中有關類的資訊可能分散在多個檔案中。
資料型別的自動強制轉換
在Java中強制一種型別的資料元素變成一種不太精確的資料型別需要程式設計人員採用預測方法。
希望通過以上內容的介紹,能夠給你帶來幫助。