工作小驛

          Ninja!

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            103 Posts :: 0 Stories :: 36 Comments :: 0 Trackbacks
                 Java語言由語法規(guī)則和類庫兩部分組成,其中語法規(guī)則確定了Java程序的書寫規(guī)范,學(xué)習(xí)好語法規(guī)則是Java語言,也是所有編程語言的基本功。本文主要向大家簡單介紹一下Java的語法規(guī)則。 Java語言與C/C++語言有著緊密的聯(lián)系,Java中的許多術(shù)語來自于C++,起語法也來自于C++。因此Java的語法和C++的語法計(jì)劃一模一樣。下面簡單介紹一下Java的具體語法。


          一、Java的詞法
          1、標(biāo)識符
          標(biāo)識符是類、變量和方法等的名字,作用是讓編譯器能夠識別它們。在Java語言中,標(biāo)識符可以包含數(shù)字、字母、下劃線(_)和美圓符號($),但是不能以數(shù)字作為開頭。與C/C++語言不同的是,Java語言還可以將一些非拉丁字母包含在標(biāo)識符中,這是因?yàn)镴ava語言使用的是Unicode字符,所有的十六進(jìn)制00C0以上的Unicode字符都可以用在標(biāo)識符中。但是Java語言的關(guān)鍵字是不能用來作為標(biāo)識符的。

          我們在使用標(biāo)識符的時(shí)候應(yīng)該盡量表達(dá)所要表示的類、變量、方法等的含義。另外,標(biāo)識符中可以使用下劃線,我們應(yīng)該充分利用這一點(diǎn)以提高程序的可讀性。

          2、關(guān)鍵字

          以下是Java的全部關(guān)鍵字:
          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
          * 尚未使用的關(guān)鍵字
          ** 為Java 2增加的關(guān)鍵字

          3、注釋

          Java有三種形式的注釋:

          第一種是C語言的傳統(tǒng)注釋方式,即將“/*”和“*/”之間的文本都視為注釋,這種注釋可以跨越多行。

          第二種是C++風(fēng)格的注釋,即將“//”之后直到行尾的文本都視為注釋,這種注釋只能包含一行。

          第三種是Java新增加的注釋方式,即將“/**”和“*/”之間的文本都視為注釋,這種注釋也可以夸耀多行。注意,這種注釋方式生成的注釋將作為Javadoc文檔保存。

          二、操作符
          1、算術(shù)操作符


          操作符 用途 優(yōu)先級 結(jié)合性
          ++,-- 自動遞增,自動遞減 2(僅次于括號) 從右到左
          +,- 一元加,一元減 2 從右到左
          *,/ 乘,除 3 從左到右
          % 取余(求模) 3 從左到右
          +,- 加,減 4 從左到右


          2、布爾運(yùn)算與關(guān)系運(yùn)算符
          操作符 用途 優(yōu)先級 結(jié)合性
          >,<,>=,<= 測試相對大小 6 從左到右
          == 測試相等性 7 從左到右
          != 測試不等性 7 從左到右
          ?: 根據(jù)第一個(gè)操作數(shù)返回后兩個(gè)操作數(shù)之一 13 從左到右
          ! 非 2 從右到左
          & 布爾與 8 從左到右
          ^ 異或 9 從左到右
          | 布爾或 10 從左到右
          && 條件與 11 從左到右
          || 條件或 12 從左到右


          3、位操作符
          操作符 用途 優(yōu)先級 結(jié)合性
          ~ 非(位求補(bǔ)) 2 從右到左
          <<,>> 左移,右移 5 從左到右
          >>> 當(dāng)作無符號右移 5 從左到右
          & 位和 8 從左到右
          ^ 位異或 9 從左到右
          | 位或 10 從左到右

          4、賦值操作符
          操作符 用途 優(yōu)先級 結(jié)合性
          = 賦值 14 從右到左
          *= 操作同時(shí)賦值 14 從右到左
          /= 操作同時(shí)賦值 14 從右到左
          %= 操作同時(shí)賦值 14 從右到左
          += 操作同時(shí)賦值 14 從右到左
          -= 操作同時(shí)賦值 14 從右到左
          >>= 操作同時(shí)賦值 14 從右到左
          <<= 操作同時(shí)賦值 14 從右到左
          >>>= 操作同時(shí)賦值 14 從右到左
          ^= 操作同時(shí)賦值 14 從右到左
          |= 操作同時(shí)賦值 14 從右到左
          &= 操作同時(shí)賦值 14 從右到左


          5、特殊操作符
          cast操作符將一種數(shù)據(jù)類型轉(zhuǎn)換成為另一種數(shù)據(jù)類型,cast應(yīng)寫成把要校正操作數(shù)的類型名放在括號中。

          例如: int i; long l; l=7876547; i=(int)l; 如果給高精度的變量賦予一個(gè)低精度值,則不需校正。類型校正操作符的優(yōu)先級為2,結(jié)合性為從右到左結(jié)合。

          將以上講到的操作符的優(yōu)先級總結(jié)如下:


          優(yōu)先級 運(yùn)算符 結(jié)合順序
          1 []數(shù)組運(yùn)算 .點(diǎn)運(yùn)算符 ()調(diào)用方法 從左到右
          2 ! ~ ++ -- +(一元加) -(一元減) ()強(qiáng)制類型轉(zhuǎn)換 new 從右到左
          3 * / % 從左到右
          4 +(二元加) -(二元減) 從左到右
          5 >> << >>> 從左到右
          6 < <= > >= instanceof 從左到右
          7 == != 從左到右
          8 & 從左到右
          9 ^ 從左到右
          10 | 從左到右
          11 && 從左到右
          12 || 從左到右
          13 ?: 從左到右
          14 = += -= *= /= %= &= |= ^= <<= >>= >>>= 從右到左


          三、常量
          1、整型常量

          在Java語言中,整型常量有三種形式,它們分別是:十進(jìn)制、八進(jìn)制、十六進(jìn)制。
          需要注意的是十進(jìn)制數(shù)不能以0開頭,這是因?yàn)榘诉M(jìn)制的數(shù)是以0開頭的,而十六進(jìn)制數(shù)以0x或0X開頭。

          2、浮點(diǎn)型常量

          浮點(diǎn)數(shù)只能表示十進(jìn)制數(shù)。浮點(diǎn)數(shù)有兩種表示方法,即標(biāo)準(zhǔn)表示法和科學(xué)記數(shù)法。浮點(diǎn)數(shù)又分為單精度數(shù)和雙精度數(shù)。

          3、布爾型常量

          布爾型常量有兩個(gè)值:ture(或TURE)和false(或FALSE)它們分別表示真和假,這兩個(gè)值用來表示事物的狀態(tài),它們必居其一。通過測量布爾值可以判斷是否執(zhí)行某個(gè)步驟。

          4、字符型常量

          字符型常量是一個(gè)單一的字符,其形式是由兩個(gè)單引號引起來的一個(gè)字符。但是兩個(gè)單引號引起來的不能是單引號和反斜杠,即‘’和‘\’是不正確的寫法。

          大家一定要記住,Java語言中的字符是16位的Unicode字符,這與C/C++等語言是不一樣的。

          同C/C++語言一樣,Java語言也有轉(zhuǎn)意序列。Java中的轉(zhuǎn)意序列的功能見下表:

          轉(zhuǎn)義序列 標(biāo)準(zhǔn)形式 功能描述
          \ 繼續(xù)
          \n NL 回車換行
          \t HT 水平制表符
          \b BS 后退一格
          \r CR 回車不換行
          \f FF 換頁
          \ 單引號
          \\ \ 反斜杠
          \" " 雙引號
          \ddd 0ddd 八進(jìn)制模式
          \xddd 0xddd 十六進(jìn)制模式
          \udddd 0xdddd Unicode雙字節(jié)字符

          字符串常量
          字符串常量是由雙引號引起來的一系列字符,與C/C++語言中不同的是,Java語言中的字符串不是通過字符數(shù)組來實(shí)現(xiàn)的,而是通過字符串類(即String類)來實(shí)現(xiàn)的。

          四、變量和數(shù)據(jù)類型
          在Java中,數(shù)據(jù)的類型可以分為四種:基本數(shù)據(jù)類型、數(shù)組類型、類和接口類型。任何數(shù)據(jù)都一定是上述數(shù)據(jù)類型的一種。
          其中基本數(shù)據(jù)類型可以分為四大類:布爾型、字符型、整數(shù)型和浮點(diǎn)型。這些類型的數(shù)據(jù)與前面介紹的常量的類型基本相同,在此不再多說。下面將整數(shù)型和浮點(diǎn)型變量的取值范圍列出:

          表一、

          類型 寬度 取值范圍
          byte 8位 -256到256
          short 16位 -32768到32767
          int 32位 -2147483648到2147483647
          long 64位 -9223372036854775808到9223372036854775807

          表二、

          進(jìn)制 整數(shù) 長整數(shù)
          十進(jìn)制 最大正整數(shù) 2147483647(2的31次方減1) 923372036854775807L(2的63次方減1)
          八進(jìn)制 最大正整數(shù) 077777777777(2的31次方減1) 07777777777777777777L(2的63次方減1)
          最小負(fù)整數(shù) 020000000000(-2的31次方) 04000000000000000000L(-2的63次方)
          十六進(jìn)制 最大正整數(shù) 0x7fffffff(2的31次方減1) 0x7fffffffffffffffL(2的63次方減1)
          最小負(fù)整數(shù) 0x80000000(-2的31次方) 0x8000000000000000L(-2的63次方)

          浮點(diǎn)數(shù)能表示的數(shù)值從小到大分別是:負(fù)無窮大、負(fù)有限值、負(fù)零、正零、正有限值及正無窮大。其中正零和負(fù)零在進(jìn)行數(shù)值比較的時(shí)候是相等的,但仍有辦法分辨這兩個(gè)值,例如在進(jìn)行1.0/0.0的時(shí)候會得到正無窮大的結(jié)果。其它非零非無窮大的有限值是以s*m*(2^e)來表示的,s和m的取值范圍見下表:
          表三、

          類型 s m e
          float +1或-1 小于2的24次方的正整數(shù) 149到104的整數(shù)
          double +1或-1 小于2的53次方的正整數(shù) 1045到1000的整數(shù)

          表四、float 最大值 3640282347e+38f
          非零最小值 1.40239846e-45f
          double 最大值 1.79769313486231570e+308
          非零最小值 4.940656458412465334e-324

          另外浮點(diǎn)數(shù)還有一些特殊值,見下表:float 最大值 Float.MAX_VALUE
          最小值 Float.MIN_VALUE
          正無窮大 Float.POSITIVE_INFINITY
          負(fù)無窮大 Float.NEGATIVE_INFINITY
          NaN Float.NaN
          double 最大值 Double.MAX_VALUE
          最小值 Double.MIN_VALUE
          正無窮大 Double.POSITIVE_INFINITY
          負(fù)無窮大 Double.NEGATIVE_INFINITY
          NaN Double.NaN

          與C/C++語言中不同的是,在Java語言中,所有的基本數(shù)據(jù)類型都有預(yù)設(shè)值,就是說當(dāng)我們聲明一個(gè)變量時(shí),即使我們沒有對它賦值,它的值也是一定的,而不像在C/C++中那樣是不可預(yù)測的。具體個(gè)類型的預(yù)設(shè)值見下表:

          基本數(shù)據(jù)類型 預(yù)設(shè)值
          Boolean false
          Char \u000
          Byte (byte)0
          Short (short)0
          Int 0
          Long 0L
          Float 0.0L
          Double 0.0d

          五、Java與C/C++的比較
          由于Java的語法直接來源于C/C++,所以Java的程序控制語句與C/C++一模一樣,在此不再多說。以下重點(diǎn)介紹一下Java與C/C++的不同。
          指針

          大家在使用C語言編程的時(shí)候想必都曾經(jīng)因?yàn)橹羔樀膹?fù)雜計(jì)算而煩惱,在C/C++語言編程過程中,指針可能引起許多錯(cuò)誤,這些復(fù)雜的指針?biāo)惴ㄋa(chǎn)生的錯(cuò)誤常常讓人迷惑不解,導(dǎo)致C/C++程序員在此浪費(fèi)了大量的時(shí)間??紤]到這種原因,Java中取消了指針。指針的功能由參考(reference)所取代,這使得Java中對復(fù)雜數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)更加容易,因?yàn)橛脤ο蠛蛯ο髷?shù)組實(shí)現(xiàn)復(fù)雜的數(shù)據(jù)結(jié)構(gòu)更可靠。

          函數(shù)

          在Java中沒有C/C++中應(yīng)用廣泛的函數(shù),C/C++中通過函數(shù)實(shí)現(xiàn)的功能在Java中都是通過類和方法來實(shí)現(xiàn)的。

          繼承

          C++支持多重繼承,這是一個(gè)從多個(gè)父類中派生一個(gè)類的有效辦法,但這種派生很復(fù)雜,也很容易產(chǎn)生問題。因此,Java中沒有采用多重繼承,但Java的Objective C協(xié)議接口能完成C++中多重繼承的所有功能。

          goto語句

          大家知道,在使用高級語言編程時(shí)過多的使用goto語句會使程序變得十分混亂,因此Java中也沒有使用goto語句。但是不可否認(rèn),當(dāng)程序比較容易控制的時(shí)候,適當(dāng)使用goto語句能使程序的運(yùn)行更快捷,因此Java中使用了多重break和continue語句(允許break和continue語句使用標(biāo)簽)實(shí)現(xiàn)C++種goto語句的功能。

          聯(lián)合和結(jié)構(gòu)

          在C++中有三種數(shù)據(jù)結(jié)構(gòu):聯(lián)合、結(jié)構(gòu)和類;Java中只有類,它可以實(shí)現(xiàn)上述三者的功能。

          字符串

          在C/C++中,字符串是通過字符數(shù)組實(shí)現(xiàn)的,但是由于數(shù)組的空間不是動態(tài)分配的,這容易出現(xiàn)越界錯(cuò)誤,例如:常有預(yù)先設(shè)定的字符數(shù)組不能容納后輸入的字符串。在Java中,字符串是一類特定的對象,這使得字符串更具有一致性和可預(yù)見性。

          Typedef、Define和預(yù)處理器

          Java中不需要#define語句、預(yù)處理器或者typedef,但需要頭文件。在Java中一個(gè)類的信息必須包含在一個(gè)文件中,而C/C++中有關(guān)類的信息可能分散在多個(gè)文件中。

          數(shù)據(jù)類型的自動強(qiáng)制轉(zhuǎn)換

          在Java中強(qiáng)制一種類型的數(shù)據(jù)元素變成一種不太精確的數(shù)據(jù)類型需要編程人員采用預(yù)測方法。

          posted on 2007-07-10 08:46 王君 閱讀(206) 評論(0)  編輯  收藏 所屬分類: J2SE
          主站蜘蛛池模板: 长春市| 桐庐县| 聂荣县| 灵山县| 张家川| 新巴尔虎右旗| 长武县| 井研县| 张家界市| 花垣县| 石城县| 康保县| 东阿县| 富阳市| 托里县| 莒南县| 彩票| 修武县| 临西县| 肥西县| 札达县| 额济纳旗| 海南省| 延安市| 正宁县| 呼伦贝尔市| 祥云县| 华阴市| 宝坻区| 林甸县| 麻城市| 正阳县| 福建省| 平舆县| 临海市| 顺义区| 巴东县| 潜山县| 乐山市| 泰州市| 天水市|