版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第2章 Java基本語法第2章 Java基本語法用戶要想掌握并熟練應(yīng)用Java語言,就需要對Java語言中的基礎(chǔ)知識進(jìn)行充分地了解。本章介紹Java語言的基本語法,包括數(shù)據(jù)類型、類型轉(zhuǎn)換、拆箱、裝箱、變量、常量、運算符和表達(dá)式以及注釋等內(nèi)容。Java語言與C#和C+等語言有著相似的地方,因此,學(xué)習(xí)過C#和C+語言的讀者在學(xué)習(xí)本章時會感到很輕松。學(xué)習(xí)目標(biāo)l 掌握數(shù)據(jù)類型的分類。l 掌握變量的聲明和賦值。l 掌握標(biāo)識符的命名規(guī)則。l 熟悉兩種基本類型轉(zhuǎn)換。l 掌握算術(shù)運算符和賦值運算符。l 熟悉關(guān)系運算符和邏輯運算符。l 了解位運算符和其他運算符。l 熟悉運算符的優(yōu)先級。l 熟悉Java中的關(guān)鍵字
2、。l 掌握J(rèn)ava中的3種注釋。l 能夠熟練地使用Scanner類。2.1 數(shù) 據(jù) 類 型數(shù)據(jù)是程序的主要組成部分,它在定義時必須有變量名和數(shù)據(jù)類型,不同的數(shù)據(jù)類型執(zhí)行不同的操作,數(shù)據(jù)的作用域表示數(shù)據(jù)在程序中可以使用的范圍。本節(jié)將簡單介紹Java中的數(shù)據(jù)類型。2.1.1 數(shù)據(jù)類型分類數(shù)據(jù)類型是指明變量或表達(dá)式的狀態(tài)和行為。Java語言中有大量的數(shù)據(jù)類型,大體上可以分為基本數(shù)據(jù)類型(或內(nèi)置數(shù)據(jù)類型)和引用數(shù)據(jù)類型兩類?;緮?shù)據(jù)類型和引用數(shù)據(jù)類型又可以再細(xì)分,如圖2-1所示。從圖2-1中可以看出,基本數(shù)據(jù)類型包括數(shù)值型、字符型和布爾型。其中數(shù)值型又可分為整數(shù)類型和浮點型;引用數(shù)據(jù)類型包括類、接口和
3、數(shù)組。Java為每一個基本數(shù)據(jù)類型提供封裝類,如表2-1所示。圖2-1 數(shù)據(jù)類型分類表2-1 基本數(shù)據(jù)類型及對象封裝類基本類型對象封裝類charCharacterbyteBytebooleanBooleanshortShortintIntegerlongLongfloatFloatdoubleDouble2.1.2 整數(shù)類型整數(shù)類型用來存儲整數(shù)數(shù)值,即沒有小數(shù)部分的數(shù)值。Java定義了4種整數(shù)類型:byte(字節(jié)型)、short(短整型)、int(整型)和long(長整型)。所有這些類型都是有符號的、正的或負(fù)的整數(shù)。Java不支持無符號的、只是正值的整數(shù)。1byte類型byte是最小的整數(shù)類型
4、。對于該類型的變量,內(nèi)存分配給它1個字節(jié)占8位。byte取值范圍在-2727-1之間,即-128127。當(dāng)操作來自網(wǎng)絡(luò)或文件的數(shù)據(jù)流時,byte類型的變量特別有用;當(dāng)操作與Java的其他內(nèi)置類型不直接兼容原始的二進(jìn)制數(shù)據(jù)時,byte類型的變量也很有用?!纠?-1】下面代碼分別聲明3個byte類型的變量a、b和c:byte a;byte b;byte c;聲明多個變量時,如果變量的類型相同,那么可以一次聲明多個變量,變量之間通過“,”(逗號)進(jìn)行分隔。如下代碼等價于例2-1中的代碼:byte a,b,c2short類型short是有符號的16位類型,它的范圍在-215215-1之間。short限
5、制數(shù)據(jù)的存儲順序為先高字節(jié),后低字節(jié),這樣在某些機器中程序就會出錯,因此該類型很少使用?!纠?-2】下面聲明short類型的a變量和b變量,并為它們指定初始值,代碼如下:short a=12,b=11;3int類型int是最常用的整數(shù)類型,它是有符號的32位類型。int類型的取值范圍在-231231-1之間。如果要聲明用戶年齡、點擊率和銷售量時都可以使用int類型。除了常用的用途外,int類型變量通常用于控制循環(huán)和索引數(shù)組。當(dāng)需要使用整數(shù)時,int通常是最好的選擇?!纠?-3】下面聲明int類型的age變量,并為其指定初始值:int age = 12;4long類型long是有符號的64位類型
6、,其取值范圍在-263263-1之間。對于那些int類型不足以容納期望值的情況,long類型基本上都能解決,它的存儲范圍相當(dāng)大,當(dāng)需要很大的整數(shù)時,這使得它顯得很有用。 注意:在為整數(shù)類型的變量賦值時,既可賦值為十進(jìn)制的整數(shù),也可賦值為八進(jìn)制或十六進(jìn)制的整數(shù),但是需要注意變量能夠接受的最大值與最小值,否則會出現(xiàn)錯誤。當(dāng)給long類型變量賦值時,如果賦予的值大于int類型的最大值或小于int類型的最小值,則需要在數(shù)字后加L或l,以此表示該數(shù)據(jù)為長整型。2.1.3 浮點型浮點型也稱為實型,是指帶有小數(shù)部分的數(shù)據(jù)。當(dāng)計算需要小數(shù)精度的表達(dá)式時可使用浮點型數(shù)據(jù)。Java中的浮點型包括float和dou
7、ble兩種。其中float是指單精度浮點型;double是指雙精度浮點型。在表2-2中對這兩種類型的寬度和范圍進(jìn)行了說明。表2-2 浮點型的寬度和范圍類 型寬度(位)大致范圍double644.9E-3241.8E+308float321.4E-0453.4E+0381float類型float類型表示使用32位存儲的單精度數(shù)值。在某些處理器上,單精度運算速度更快,并且占用的空間是雙精度的一半,但是當(dāng)數(shù)值非常大或非常小時存儲精度會變得不精確。如果需要小數(shù)部分,并且精度要求不是很高時,float類型的變量是很有用的。例如,表示美元或者美分時可以使用float類型。對于float類型的值,需要在數(shù)字
8、后添加大寫字母F或小寫字母f。2double類型雙精度使用double關(guān)鍵字表示,并使用64位存儲數(shù)值。在針對高精度數(shù)學(xué)運算進(jìn)行了優(yōu)化的某些現(xiàn)代處理器上,實際上雙精度數(shù)值的運算速度更快。所有常用數(shù)學(xué)函數(shù)(如sin()和sqrt()等)都返回雙精度值。如果需要在很多次迭代運算中保持精度,或是操作非常大的數(shù)值時,double類型是最佳選擇。2.1.4 字符型Java語言中的字符類型用來存儲單個字符,它占用16位(兩個字節(jié))的內(nèi)存空間,使用char關(guān)鍵字進(jìn)行標(biāo)識。因此,在定義字符類型的變量時,可以使用char關(guān)鍵字。char類型的范圍在065 536之間,沒有負(fù)的char值。為char類型
9、的變量賦值時,可以使用單引號或數(shù)字。char類型使用兩個字節(jié)的Unicode編碼表示,Unicode定義了一個完全國際化的字符集,能夠表示全部人類語言中的所有字符。Unicode是數(shù)十種字符集的統(tǒng)一體,如拉丁字符集、希臘字符集、阿拉伯字符集、日文字符集以及韓文字符集等。為此,Unicode需要16位寬度。因此,在Java中的char是16位類型。 注意:在Java的正式規(guī)范中,char被當(dāng)作整數(shù)類型,這意味著char和int、short、long以及byte位于同一分類中。但是,由于char類型的主要用途是表示Unicode字符,因此,通??紤]將char放到單獨的分類中。2.1.5 布爾類型J
10、ava有一個稱為boolean的基本類型,用于表示邏輯值。它只能是兩個可能的值之一:true或false(默認(rèn)值)。所有關(guān)系運算都返回這種類型的值。對于if和for這類控制語句的條件表達(dá)式,也需要boolean類型。Java中的true和false不能轉(zhuǎn)換成任何數(shù)字表示形式,即true不等于1,false也不等于0。在Java中,只能將布爾類型的值賦給以布爾類型聲明的變量,或者用于使用布爾運算符的表達(dá)式中。2.1.6 引用數(shù)據(jù)類型除了基本的數(shù)據(jù)類型外,Java語言還定義了許多引用數(shù)據(jù)類型。綜合使用基本數(shù)據(jù)類型和引用數(shù)據(jù)類型,可以處理實際需求中遇到的各種數(shù)據(jù)形式,能夠編寫更加復(fù)雜的程序。下面介紹
11、3種最常用的引用數(shù)據(jù)類型:數(shù)組、類和接口。1數(shù)組數(shù)組是Java語言中的一種引用數(shù)據(jù)類型,是具有相同數(shù)據(jù)類型的數(shù)據(jù)集合。數(shù)組中的每個數(shù)據(jù)稱為數(shù)組元素,數(shù)組元素是有序的(關(guān)于數(shù)組的知識會在第4章進(jìn)行詳細(xì)介紹)。2類類是面向?qū)ο蟪绦蛟O(shè)計語言中的一個概念,它實際上是對某種類型的對象定義變量和方法的原型。簡單來說,類表示對現(xiàn)實生活中某一類具有共同特征的事物進(jìn)行抽象,是面向?qū)ο缶幊痰幕A(chǔ)。對于Java而言,類是Java的核心和本質(zhì),是Java語言的基礎(chǔ)(關(guān)于類的知識會在第7章進(jìn)行詳細(xì)介紹)。3接口Java中的接口是一系列方法的聲明,是一些方法特征的集合。簡單來說,接口表示一種約定,實現(xiàn)接口的類必須嚴(yán)格按照
12、其定義實現(xiàn)每個細(xì)節(jié)(關(guān)于接口的知識會在第9章進(jìn)行詳細(xì)介紹)。2.2 變 量Java中存在變量和常量,實際上,在數(shù)學(xué)中已經(jīng)涉及了變量和常量。Java程序中的變量、常量,與數(shù)學(xué)中的變量、常量意義相同。例如,如果銀行中活期存款的利率為3%,那么3%就是常量,而從銀行中獲得的利息會不斷變化,此時利息就是變量。下面將介紹Java中的變量,包括變量的聲明、賦值和作用域等。2.2.1 變量的聲明在Java程序中,變量是基本存儲單元。所有的變量在使用之前必須聲明,它通過聯(lián)合標(biāo)識符、類型以及可選的初始化器來定義,其基本語法如下:type identifier = value , identifier = val
13、ue ;其中,type是Java的基本數(shù)據(jù)類型或者是類和接口的名稱;identifier是變量的名稱??梢酝ㄟ^指定一個等號和一個值為初始化變量。初始化表達(dá)式的結(jié)果類型必須與為變量指定的類型相同(或兼容)。為了聲明指定類型的多個變量,需要使用以逗號分隔的列表?!纠?-4】下面分別聲明int、double和float類型的變量:int類型的變量名分別是age、score和maxvalue;double類型的變量名是price;float類型的變量名是num1和num2。其中,在聲明age和score變量時需要指定初始值,示例代碼如下:int age=12,score=100,maxvalue;do
14、uble price;float num1,num2;在為Java中的變量命名時,變量名稱并不是任意的,它遵循標(biāo)識符的命名規(guī)則。標(biāo)識符是指可被用來為類、變量或方法等命名的字符序列。換句話說,標(biāo)識符就是用用戶自定義的名稱來標(biāo)識類、變量或方法等。標(biāo)識符的命名規(guī)則如下。(1) 標(biāo)識符必須由數(shù)字09、大寫字母AZ、小寫字母az、下劃線_、美元符號$、人民幣符號¥以及所有在十六進(jìn)制0xc0前的ASCII碼組成。(2) 標(biāo)識符的名稱必須以字母、下劃線_、美元符號$或者人民幣符號¥開頭。(3) 不能把Java中的關(guān)鍵字、保留字等作為標(biāo)識符。(4) 標(biāo)識符的長度沒有限制。(5) 標(biāo)識符區(qū)分大小寫。(6)
15、60; Java語言對字母的大小寫有嚴(yán)格的要求,而且標(biāo)識符的命名最好能反映它的作用。例如,score表示成績;age表示年齡;grade表示年級等。變量命名除了遵循上述規(guī)則外,還需要遵循一個規(guī)則:如果變量名是單個單詞,那么單詞的全部字母要小寫,如int score;如果變量名是由多個單詞組成的復(fù)合單詞,除第一個單詞外,其后所有單詞首字母都要大寫,如int studentScore?!纠?-5】下面代碼列出了幾種常見的合法和不合法的情況:int _age = 12;/合法變量int class = 12;/不合法變量,使用了關(guān)鍵字double ¥score_1 = 98.5;/合法變量
16、int studentAge = 10;/合法變量int #_age = 15;/不合法,以非法的#開頭 提示:在Java語言中,雖然允許使用漢語中的文字和其他語言文字作為變量名,但是筆者建議讀者最好不要使用這些文字作為變量名。2.2.2 變量的賦值聲明變量之后,可以使用賦值運算符等號“=”為它賦值。賦值有兩種方法:一種是在聲明時為其賦值,如例2-4;另一種是先聲明后賦值。【例2-6】下面首先聲明int類型的age變量,聲明時為其指定初始值8,然后聲明double類型的price變量,聲明后將其賦值為12.5。示例代碼如下:int age = 8;/聲明age變量并賦值double price
17、;/聲明price變量price = 12.5;/為price變量賦值 注意:如果只聲明變量而不賦值,系統(tǒng)將會使用默認(rèn)值進(jìn)行初始化。如byte、short、int、long類型的默認(rèn)值為0;double和float類型的默認(rèn)值為0.0;boolean類型的默認(rèn)值為false;所有引用類型的默認(rèn)值為null。2.2.3 變量的作用域變量的作用域是指程序代碼能夠訪問該變量的區(qū)域,如果超出該區(qū)域訪問變量,則編譯時會出現(xiàn)錯誤。變量的作用域決定了變量的生命周期,變量的生命周期是指從聲明一個變量并分配內(nèi)存空間開始,到釋放該變量并清除所占用的內(nèi)存空間結(jié)束。變量聲明的位置決定了變量的作用域,根據(jù)作用域的不同,
18、可以將變量分為全局變量和局部變量。1全局變量全局變量即在程序范圍之內(nèi)都有效的變量。【例2-7】在下面的代碼中,Test類中聲明的a變量就是一個全局變量,它在整個類中都可以使用: public class Test int a = 10;public static void main(String args) Test v = new Test();v.print();void print() System.out.println("全局變量 a=" + a);2局部變量局部變量就是在程序中的一部分內(nèi)(如main()方法)是有效的。在類的方法中聲明的變量(包括方法的參數(shù))屬于
19、局部變量,它們只在當(dāng)前的方法內(nèi)有效,不能用于類的其他方法中。在方法的代碼塊(如if語句塊)中聲明的變量也是局部變量,它只在該代碼塊內(nèi)有效。局部變量的生命周期取決于方法,當(dāng)方法被調(diào)用時,Java虛擬機為方法中的局部變量分配內(nèi)存空間;當(dāng)方法的調(diào)用結(jié)束后,該方法中的局部變量占用的內(nèi)存空間將會被釋放,并被銷毀掉。【例2-8】在Test類中聲明maxvalue變量和print()方法,在print()方法中獲取傳入的參數(shù),并將參數(shù)值保存到value變量中。通過if語句判斷value變量與maxvalue變量值的大小,根據(jù)判斷返回不同的結(jié)果。示例代碼如下:public class Test double
20、maxvalue = 120;double print(double val) double value = val;if (value > maxvalue)return value;elsereturn maxvalue;在上述代碼中,maxvalue是全局變量,它在該類的任何地方都可以使用。而print()方法的value則是一個局部變量,它只能在該方法中使用。如果在方法外部調(diào)用,那么在編譯時就會出現(xiàn)錯誤。2.3 常 量如果需要存儲在程序運行時可以修改的值,使用變量很有用。對于在程序運行過程中一直不變,即不需要修改的值,可以用一種特殊的變量常量。常量是一種標(biāo)識符,它只在聲明時進(jìn)行定
21、義,一旦定義就不允許在程序運行時再改變其值。常量一般都以大寫字母表示,并使用final關(guān)鍵字進(jìn)行修飾。為了將常量和變量進(jìn)行區(qū)分,一般會將常量名稱的字母全部大寫。如果常量名由多個單詞組成,則由下劃線“_”連接。【例2-9】在計算圓的周長和面積時經(jīng)常會使用到 p,它的值是一個固定值。其聲明代碼如下:final double PI = 3.14;2.4 基本數(shù)據(jù)類型轉(zhuǎn)換了解過數(shù)據(jù)類型、變量和常量之后,本節(jié)來簡單地了解數(shù)據(jù)類型之間的轉(zhuǎn)換。在Java中,除了boolean類型以外的7個基本類型,把某個類型的值直接賦給另外一種類型的變量,這種方式稱為基本類型轉(zhuǎn)換。一般情況下,基本數(shù)據(jù)類型轉(zhuǎn)換可分為自動類型
22、轉(zhuǎn)換和強制類型轉(zhuǎn)換兩種。2.4.1 自動類型轉(zhuǎn)換自動類型轉(zhuǎn)換必須在兩種兼容的數(shù)據(jù)類型的數(shù)據(jù)之間進(jìn)行,并且必須是由低精度類型向高精度類型轉(zhuǎn)換。簡單來說,自動類型轉(zhuǎn)換就是將小范圍的數(shù)據(jù)類型轉(zhuǎn)換成大范圍的數(shù)據(jù)類型。自動類型轉(zhuǎn)換適合于整數(shù)類型、字符型和浮點型。在運算中,不同類型的數(shù)據(jù)先轉(zhuǎn)化為同一類型,然后進(jìn)行運算,轉(zhuǎn)換規(guī)則如表2-3所示。表2-3 自動類型轉(zhuǎn)換的規(guī)則操作數(shù)1的類型操作數(shù)2的類型轉(zhuǎn)換后的類型byte、short、charintintbyte、short、char、intlonglongbyte、short、char、int、longfloatfloatbyte、short、char、in
23、t、long、floatdoubledouble從表2-3中可以看出,byte、short、char的優(yōu)先級最低,這三者之間不會互相轉(zhuǎn)換,然后依次為int、long、float和double(最高)。【例2-10】下面代碼演示了不同類型之間的自動類型轉(zhuǎn)換:public class Test public static void main(String args) int i = 9;char c = 'a'float f = 3.14F;double d = 1.129;i = c;/字符型char轉(zhuǎn)換成整型intd = f;/單精度浮點轉(zhuǎn)換成雙精度浮點f = i;/整型int
24、轉(zhuǎn)換成floatSystem.out.println("i=" + i + ",d=" + d + ",f=" + f);執(zhí)行上述代碼,結(jié)果如下:i=97,d=3.140000104904175,f=97.0ss2.4.2 強制類型轉(zhuǎn)換與自動類型轉(zhuǎn)換正好相反,強制類型轉(zhuǎn)換是將高精度類型向低精度類型進(jìn)行轉(zhuǎn)換。在進(jìn)行強制類型轉(zhuǎn)換時,需要注意的是如果將高精度數(shù)據(jù)向低精度數(shù)據(jù)進(jìn)行類型轉(zhuǎn)換時,可能會因為超出了低精度數(shù)據(jù)類型的取值范圍,導(dǎo)致數(shù)據(jù)不完整,數(shù)據(jù)精度變低。實現(xiàn)數(shù)據(jù)的強制類型轉(zhuǎn)換時,要在被轉(zhuǎn)換的變量前面添加轉(zhuǎn)換的數(shù)據(jù)類型。轉(zhuǎn)換格式如下:目
25、標(biāo)類型 變量 = (目標(biāo)類型)表達(dá)式;【例2-11】在程序的main()方法中聲明double類型的兩個變量score1和score2,并為這兩個變量賦值。然后將這兩個變量強制轉(zhuǎn)換為int類型,最后輸出結(jié)果。示例代碼如下:public class Test public static void main(String args) double score1 = 98.7;double score2 = 70.2;int result1 = (int) score1 + (int) score2;System.out.println(result1);在上述代碼中,score1變量的值強制轉(zhuǎn)換后
26、的結(jié)果為98,score2變量的值強制轉(zhuǎn)換后的結(jié)果為70,強制轉(zhuǎn)換后這兩個變量的精度都變低了。2.5 運算符和表達(dá)式表達(dá)式是由變量、常量和方法等通過運算符連接起來而形成的一個有意義的算式。而運算符就是在用變量或常量進(jìn)行運算時經(jīng)常使用的符號。根據(jù)操作數(shù)的數(shù)目來分,運算符可以分為一元運算符、二元運算符和三元運算符。根據(jù)功能來分,運算符可以分為算術(shù)運算符、賦值運算符、比較運算符、邏輯運算符以及位運算符等。2.5.1 算術(shù)運算符Java中的算術(shù)運算符包括+(加號)、-(減號)、*(乘號)、/(除號)和%(求余)5種。這些運算符與大家平常接觸的數(shù)學(xué)運算符具有相同的含義,這里不再詳細(xì)解釋說明。算術(shù)運算符支
27、持整型和浮點型數(shù)據(jù)的運算。當(dāng)使用運算符把兩個操作數(shù)結(jié)合到一起時,首先會將兩個操作數(shù)轉(zhuǎn)換成相同類型的數(shù)據(jù)。(1) 兩個操作數(shù)中如果有一個是double類型,那么另一個操作數(shù)一定會先轉(zhuǎn)換成double類型,然后再進(jìn)行運算。(2) 兩個操作數(shù)中如果有一個是float類型,那么另一個操作數(shù)一定會先轉(zhuǎn)換成float類型,然后再進(jìn)行運算。(3) 兩個操作數(shù)中如果有一個是long類型,那么另一個操作數(shù)一定會先轉(zhuǎn)換成long類型,然后再進(jìn)行運算。(4) 其他任何兩個基本類型的數(shù)據(jù)操作,兩個操作數(shù)都會自動轉(zhuǎn)換成int類型?!纠?-12】分別聲明double、int、float、byte和short類型的變量,然
28、后分別使用本節(jié)介紹的算術(shù)運算符進(jìn)行計算。示例代碼如下:public class bianliang public static void main(String args) double score = 90.5; /double類型的score變量int age = 100; /int類型的age變量float num = 12.5f; /float類型的num變量byte b = 10; /byte類型的b變量short c = 12; /short類型的c變量System.out.println(score + "+" + age + "=" +
29、(score + age);System.out.println(score + "-" + num + "=" + (score - num);System.out.println(age + "*" + b + "=" + (age * b);System.out.println(age + "/" + num + "=" + (score / age);System.out.println(b + "%" + c + "=" +
30、(b % c);在上述代碼中,對score和age變量進(jìn)行加法運算,由于score是double類型,因此會先將int類型的age變量轉(zhuǎn)換為double類型,然后再進(jìn)行計算。對score和num變量進(jìn)行減法運算,由于num是float類型,因此會先將double類型的score變量轉(zhuǎn)換為float類型,然后再進(jìn)行計算。運行上述代碼,結(jié)果如下:90.5+100=190.590.5-12.5=78.0100*10=1000100/12.5=0.90510%12=102.5.2 賦值運算符賦值就是將數(shù)值賦給變量,而這個賦值運算符就充當(dāng)了這個賦值的任務(wù),最簡單的賦值運算符是等號“=”。除了這個賦值運算
31、符外,還包括其他的賦值運算符,如表2-4所示。表2-4 常用的賦值運算符運 算 符說 明例 子a的結(jié)果+=將該運算符左邊的數(shù)值加上右邊的數(shù)值,其結(jié)果賦值給左邊變量本身int a=5;a+=27-=將該運算符左邊的數(shù)值減去右邊的數(shù)值,其結(jié)果賦值給左邊變量本身int a=5;a-=23*=將該運算符左邊的數(shù)值乘以右邊的數(shù)值,其結(jié)果賦值給左邊變量本身int a=5;a*=210/=將該運算符左邊的數(shù)值整除右邊的數(shù)值,其結(jié)果賦值給左邊變量本身int a=5;a/=22%=將該運算符左邊的數(shù)值除以右邊的數(shù)值,其結(jié)果賦值給左邊變量本身int a=5;a%=21在大型的程序中,靈活使用這些賦值運算符可以提高
32、程序的易讀性和易懂性,并且使程序更加容易保護。 提示:賦值運算符包括一種特殊的復(fù)合賦值運算符,如>>=、>>>=、<<=、&=、|=以及=,這些復(fù)合賦值運算符并不常用,因此這里不再多做介紹。2.5.3 關(guān)系運算符通過關(guān)系運算符計算的結(jié)果是一個boolean類型值。當(dāng)表達(dá)式有關(guān)系運算符時,計算機將會判斷運算對象之間通過關(guān)系運算符指定的關(guān)系是否成立,如果成立,返回值為true,否則返回值為false。Java中的關(guān)系運算符包括6種,其說明如表2-5所示。表2-5 關(guān)系運算符運 算 符說 明例 子結(jié) 果>大于'a'>
33、9;b'false<小于100<20false>=大于等于100>=20true<=小于等于100<=100true!=不等于20!=20.00false=等于20=20.00true關(guān)系運算符不僅適用于數(shù)值類型,還適用于字符類型,以及其他非基本數(shù)據(jù)類型(如數(shù)組、字符串)。在表2-5中,等于和不等于運算符適用于引用類型和所有的基本數(shù)據(jù)類型,其他關(guān)系運算符只適用于除boolean類型以外的基本數(shù)據(jù)類型?!纠?-13】定義int類型的變量a和b,分別對其進(jìn)行賦值,并使用關(guān)系運算符>、=和!=比較這兩個變量的關(guān)系。示例代碼如下:public clas
34、s Test public static void main(String args) int a=10,b=21; System.out.println("說 a>b,對嗎?"+(a>b); System.out.println("說 a=b,對嗎?"+(a=b); System.out.println("說 a!=b,對嗎?"+(a!=b);運行上述代碼,結(jié)果如下:說 a>b,對嗎?false說 a=b,對嗎?false說 a!=b,對嗎?true2.5.4 邏輯運算符邏輯運算符只能對布爾類型的數(shù)據(jù)進(jìn)行操作,因此
35、,返回的結(jié)果也是布爾類型的值。Java語言中的邏輯運算符包括3種,如表2-6所示。表2-6 邏輯運算符運 算 符說 明&&邏輯與,二元運算符。前面兩個條件都為真時,返回值為true,否則返回false|邏輯或,二元運算符。前面兩個條件有一個為真時,返回值為true,否則返回false!邏輯非,一元運算符。表示否定,!true等于false;!false等于true 注意:當(dāng)操作元都為布爾類型的數(shù)據(jù)時,位運算符包括的&和|也被視為邏輯運算符,它們的運算規(guī)則與&&和|是相同的,但是在計算運算符兩邊的表達(dá)式時存在著差別。使用不同的邏輯運算符,其運算規(guī)則也會有所
36、不同,如表2-7所示為邏輯運算的可能結(jié)果。表2-7 邏輯運算符進(jìn)行邏輯運算的結(jié)果條件1的返回結(jié)果條件2的返回結(jié)果&&運算結(jié)果|運算結(jié)果!條件1的結(jié)果truetruetruetruefalsetruefalsefalsetruefalsefalsetruefalsetruetruefalsefalsefalsefalsetrue【例2-14】定義int類型的變量num1、num2和num3,分別對其進(jìn)行賦值,并使用邏輯運算符&&、|和!進(jìn)行運算。示例代碼如下:public class bianliang public static void main(String
37、 args) int num1 = 10, num2 = 20, num3 = 30; System.out.println("num1<num2并且num1=num3,對嗎?" + (num1 < num2) && (num1 = num3); System.out.println("num1<num2或者num=num3,對嗎?" + (num1 < num2) | (num1 = num3); System.out.println("num1>num2或者num2>num3,對嗎?&qu
38、ot; + (num1 > num2) | (num2 > num3); System.out.println("num2!=num3的否定結(jié)果是:" + !(num2 != num3); 在上述代碼中,由于num1<num2的結(jié)果為true,num1=num3的結(jié)果為false,使用邏輯與“&&”運算符時的返回結(jié)果為false,該運算符要求兩個返回結(jié)果都為true。而使用邏輯或“|”運算符時的返回結(jié)果為true,該運算符要求一個條件滿足true即可。運行上述代碼,結(jié)果如下:num1<num2并且num1=num3,對嗎?falsen
39、um1<num2或者num=num3,對嗎?truenum1>num2或者num2>num3,對嗎?falsenum2!=num3的否定結(jié)果是:false2.5.5 位運算符在Java的位運算符中,除按位與和按位或運算符外,其他運算符只能用于整數(shù)之間的運算。位運算符是針對整數(shù)在內(nèi)存中存儲的二進(jìn)制數(shù)據(jù)流中的位進(jìn)行操作的。Java語言中的位運算符又分為按位運算符和移位運算符。1按位運算符按位運算符是對整數(shù)的二進(jìn)制數(shù)據(jù)流中的每個位進(jìn)行運算,該運算符包括4種運算,如表2-8所示。表2-8 按位運算符及其運算規(guī)則運 算 符說 明運算規(guī)則(0和1分別表示二進(jìn)制位置)&按位與0&a
40、mp;00,1&11,0&10,1&00|按位或0|00,1|11,0|11,1|01按位異或000,110,011,101按位取反01,10從表2-8中可以看出,按位與運算的兩個二進(jìn)制位數(shù)都為1時,結(jié)果才為1,否則結(jié)果為0;按位或運算只要有一個二進(jìn)制位數(shù)為1,則結(jié)果為1,否則為0;按位異或運算的兩個二進(jìn)制位數(shù)相同(同時為0或1)時,結(jié)果為0,否則為1;按位取反運算符為一元運算符,取反運算是將二進(jìn)制中的0變?yōu)?,1變?yōu)??!纠?-15】分別使用&、|和運算6與9的結(jié)果,并輸出最終的返回值。示例代碼如下:public class Test public stati
41、c void main(String args) System.out.println("6&9的運算結(jié)果:"+(6&9);System.out.println("6|9的運算結(jié)果:"+(6|9);System.out.println("69的運算結(jié)果:"+(69);執(zhí)行上述代碼,輸出結(jié)果如下:6&9的運算結(jié)果:06|9的運算結(jié)果:769的運算結(jié)果:15以6&9為例,6的二進(jìn)制數(shù)是110,9的二進(jìn)制數(shù)是1001,將6的二進(jìn)制數(shù)前面補0變成0110,分別對它們的二進(jìn)制位數(shù)進(jìn)行&運算,運算結(jié)果為00
42、00,即0,0的十進(jìn)制數(shù)仍然為0,因此輸出0。以6|9為例,將6和9的二進(jìn)制位數(shù)分別進(jìn)行|運算,結(jié)果為1111,1111的十進(jìn)制數(shù)為15,因此輸出15。 提示:在Java中,可以將按位運算符與賦值運算符“=”組合為復(fù)合賦值運算符。例如,num&=6等價于num=num&6,其中num是一個變量。2移位運算符移位運算符也是對整數(shù)的二進(jìn)制表示中的位進(jìn)行操作。Java中的移位運算包括3種,分別為左移位運算、有符號整數(shù)的右移位運算和無符號整數(shù)的右移位運算。l 左移位運算:以m<<n為例,將整數(shù)m的二進(jìn)制數(shù)向左移動整數(shù)n指定的位數(shù),并用n個0補充二進(jìn)制數(shù)據(jù)。其實,向左移n位,
43、就相當(dāng)于乘以2的n次方。l 有符號右移位運算:以m>>n為例,將整數(shù)m的二進(jìn)制數(shù)向右移動整數(shù)n指定的位數(shù),并用n個符號位補充二進(jìn)制數(shù)的開頭(負(fù)數(shù)的符號位為1,正數(shù)為0)。其實右移n位,相當(dāng)于除以2的n次方。l 無符號右移位運算:以m>>>n為例,將整數(shù)m的二進(jìn)制數(shù)向右移動整數(shù)n指定的位數(shù),并用n個符號位補充二進(jìn)制數(shù)的開頭(負(fù)數(shù)的符號位為1,正數(shù)為0)。2.5.6 其他運算符除了前面小節(jié)介紹的幾種運算符外,Java還提供了其他的運算符,如:自增運算符、自減運算符以及三元運算符。從某種意義上來說,可以將自增運算符和自減運算符看作是算術(shù)運算符。1自增運算符自增運算符是自
44、動將變量值加1。它又分為兩種:一種是前自加,先進(jìn)行加1運算,再賦值,即+a;另一種是后自加,先賦值,然后再進(jìn)行加1運算,即a+。運算符放在不同的位置,最終得到的結(jié)果也是不同的:前自加會將變量值加1,然后再使用該變量參與表達(dá)式的運算;后自加會將變量值參與表達(dá)式的運算,然后再將變量值加1?!纠?-16】聲明int類型的變量a和b,然后將變量a前自加后輸出,將變量b后自加后輸出,最終輸出兩個變量相加的結(jié)果。示例代碼如下:public class Test public static void main(String args) int a = 10;int b = 10;System.out.pri
45、ntln("變量a的值前自加:"+(a+);System.out.println("變量b的值后自加:"+(+b);System.out.println("變量a和b的相加結(jié)果:"+(a+b);執(zhí)行上述代碼,輸出結(jié)果如下:變量a的值前自加:10變量b的值后自加:11變量a和b的相加結(jié)果:22在該例子中,由于變量a進(jìn)行前自加運算,因此先將原來的值輸出,再加上1,變成11參與后面的運算。由于變量b進(jìn)行后自加運算,因此會將原來的值加上1,再進(jìn)行輸出。此時變量b的值變成11后再參與后面的運算。2自減運算符自減運算符是自動將變量值減1。與自加運
46、算符一樣,自減運算符也分為兩種:一種是前自減,先進(jìn)行減1運算,再賦值,即-a;另一種是后自減,先賦值,然后再進(jìn)行減1運算,即a-?!纠?-17】聲明int類型的變量a和b,然后將變量a前自減后輸出,將變量b后自減后輸出,最終輸出兩個變量相加的結(jié)果。示例代碼如下:public class Test public static void main(String args) int a = 20;int b = 15;System.out.println("變量a的值前自減:"+(a-);System.out.println("變量b的值后自減:"+(-b);
47、System.out.println("變量a和b的相加結(jié)果:"+(a+b);執(zhí)行上述代碼,輸出結(jié)果如下:變量a的值前自減:20變量b的值后自減:14變量a和b的相加結(jié)果:33 注意:自增和自減運算符只能操作變量,不能操作常量或表達(dá)式,且該變量類型必須是整型、浮點型或Java包裝類型,如(num+2)+是不正確的。3三元運算符Java中使用?:表示三元運算符?;拘问饺缦拢翰紶柋磉_(dá)式 ? 表達(dá)式1 : 表達(dá)式2;在上述語法中,如果?左邊的布爾表達(dá)式的值為true,則整個表達(dá)式的值為“表達(dá)式1”的值;否則為“表達(dá)式2”的值。使用三元運算符,“表達(dá)式1”和表達(dá)式并不會都被執(zhí)行。
48、【例2-18】聲明int類型的score變量,判斷變量的值是否小于60。如果小于60則返回結(jié)果是“不及格,仍然需要努力”;否則返回結(jié)果是“已經(jīng)及格了,繼續(xù)保持”,并將返回結(jié)果保存到result變量中,最后輸出result變量的值。示例代碼如下:public class Test public static void main(String args) int score = 56;String result = score<60?"不及格,仍然需要努力":"已經(jīng)及格了,繼續(xù)保持"System.out.println(result);三元運算符可以使
49、用if-else語句來代替。以下代碼等價于上述代碼:int score = 56;if(score<60) System.out.println("不及格,仍然需要努力");else System.out.println("已經(jīng)及格了,繼續(xù)保持");2.5.7 運算符的優(yōu)先級一個表達(dá)式中可以存在多個運算符,當(dāng)需要進(jìn)行混合運算時,系統(tǒng)會根據(jù)運算符的優(yōu)先級來決定執(zhí)行順序。優(yōu)先級不同會導(dǎo)致最后得出的結(jié)果差別很大,如表2-9列出了運算符的優(yōu)先級別。表2-9 運算符的優(yōu)先級別優(yōu) 先 級說 明運 算 符最高括號()自上向下優(yōu)先級別降低后置運算符正負(fù)號+、-一元
50、運算符+、-、!乘除*、/、%加減+、-移位運算>>、>>>、<<比較大小>、>=、<、<=比較是否相等=、!=按位與運算&按位異或運算續(xù)表優(yōu) 先 級說 明運 算 符自上向下優(yōu)先級別降低按位或運算|邏輯與運算&&邏輯或運算|三元運算符?:最低賦值及復(fù)合賦值運算=、+=、-=、*=、/=、%=、>>=、>>>=、<<=、&=、=、|=在表2-9所列運算符的優(yōu)先級中,運算符的優(yōu)先級自上而下逐漸降低。其中,優(yōu)先級最高的是之前未提到的括號,它的使用與數(shù)學(xué)運算中的括
51、號一樣,用來指定括號內(nèi)的表達(dá)式要優(yōu)先處理,括號內(nèi)的多個運算符仍然要依照表2-9的優(yōu)先級順序進(jìn)行運算。對于處在同一層級的運算符,則按照它們的結(jié)合性,即“先左后右”或是“先右后左”的順序來執(zhí)行。Java中除賦值運算符的結(jié)合性為“先右后左”外,其他運算符的結(jié)合性都是“先左后右”。2.6 關(guān)鍵字列表在2.2.1節(jié)介紹標(biāo)識符的命名規(guī)則中提到過,標(biāo)識符的名稱不能是Java的關(guān)鍵字。簡單來說,關(guān)鍵字是Java語言中已經(jīng)被賦予特定意義的一些單詞,不可以再把這些單詞定義為標(biāo)識符來使用。例如,在前面介紹的int、double、float和char等類型都是Java關(guān)鍵字。完整的關(guān)鍵字如表2-10所示。表2-10
52、Java關(guān)鍵字列表intpublicthisfinallybooleanabstractcontinuefloatlongshortthrowthrowsreturnbreakforstaticnewinterfaceifgotodefaultbytedocasestrictfppackagesupervoidtryswitchelsecatchimplementsprivatefinallclassextendsvolatilewhilesynchronizedinstanceofcharprotectedimporttransientenumdefaultdoubleassertconst
53、nativevolatile2.7 Java編碼規(guī)范編碼規(guī)則可以培養(yǎng)程序員在編程時注意一些細(xì)節(jié)問題的良好習(xí)慣,提高程序的可讀性,讓程序員能夠盡快地理解新的代碼,并幫助大家編寫出規(guī)范的、利于維護的Java代碼。2.7.1 代碼編寫規(guī)則規(guī)整的代碼格式能夠為程序的開發(fā)和后期代碼的維護帶來方便。因此,在學(xué)習(xí)開發(fā)的過程中,要形成規(guī)范代碼編寫格式的良好習(xí)慣,編寫代碼時應(yīng)該注意以下幾點。l 在聲明變量時,盡量使每個變量的聲明單獨占一行,即使是聲明相同類型的變量,這樣做也有助于加入注釋。局部變量應(yīng)在聲明的同時進(jìn)行初始化,在類型和標(biāo)識符號之間可以使用空格或制表符。聲明兩個變量,每個變量獨占一行,并使用制表符使變
54、量名對齊。示例代碼如下:intage = 12;doubleprice = 12;l 語句應(yīng)以英文狀態(tài)下的分號“;”結(jié)束,且應(yīng)使每條語句單獨占一行。在寫返回語句時,書寫形式為return value,如果以表達(dá)式形式存在,則應(yīng)該使用小括號。示例代碼如下:return false;return (10>20)?"10大于20":"10小于20");l 盡量不要使用技巧性很高,難懂又容易混淆判斷的語句,否則會給后期程序的維護帶來困難,因為很難保證程序的開發(fā)與維護是同一個人。l 代碼進(jìn)行縮進(jìn)時應(yīng)使用制表符來代替空格。l 編寫代碼時,要適當(dāng)?shù)厥褂每招蟹指舸?/p>
55、碼,并且應(yīng)在難以理解或關(guān)鍵的部分加入注釋,這有助于閱讀者很快地了解代碼的結(jié)構(gòu)。2.7.2 常用代碼注釋在Java的編寫過程中需要對一些程序進(jìn)行注釋,除了自己方便閱讀外,也讓別人更好地理解自己的程序。注釋可以是編程思路或者是程序的作用,總而言之就是方便自己與他人更好地閱讀。在Java源文件的任意位置都可以加入注釋,Java編譯器會忽略程序中的注釋語句。因此,在注釋語句中編寫的任何東西,對編譯出來的程序不會有任何影響。Java語言提供了3種形式的注釋,即單行注釋、多行注釋和文檔注釋。1單行注釋單行注釋用于注釋一行,使用/符號開始,一直到換行為止的所有內(nèi)容均作為注釋而被編譯器忽略。語法如下:/注釋內(nèi)容【例2-19】定義double類型的3個變量,并對這3個變量進(jìn)行注釋。示例代碼如下:double originalPrice = 234.5; /商品原價double discou
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東科貿(mào)職業(yè)學(xué)院《制藥過程自動化與儀表》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東酒店管理職業(yè)技術(shù)學(xué)院《非線性編輯Ⅱ》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東交通職業(yè)技術(shù)學(xué)院《礦資專業(yè)英語》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東技術(shù)師范大學(xué)《現(xiàn)代軟件工程技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東工商職業(yè)技術(shù)大學(xué)《數(shù)學(xué)文化與數(shù)學(xué)思維》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東潮州衛(wèi)生健康職業(yè)學(xué)院《社會工作前沿問題研究》2023-2024學(xué)年第一學(xué)期期末試卷
- 《趙司長發(fā)言多媒體》課件
- 廣東碧桂園職業(yè)學(xué)院《外國文學(xué)作品選講》2023-2024學(xué)年第一學(xué)期期末試卷
- 贛南師范大學(xué)《材料專業(yè)基礎(chǔ)實驗(1)》2023-2024學(xué)年第一學(xué)期期末試卷
- 贛州師范高等??茖W(xué)?!段⑸镞z傳育種實驗》2023-2024學(xué)年第一學(xué)期期末試卷
- HIV陽性孕產(chǎn)婦全程管理專家共識2024年版解讀
- 小學(xué)體育跨學(xué)科主題學(xué)習(xí)教學(xué)設(shè)計:小小志愿軍
- 附件2:慢病管理中心評審實施細(xì)則2024年修訂版
- 《ISO56001-2024創(chuàng)新管理體系 - 要求》之4:“4組織環(huán)境-確定創(chuàng)新管理體系的范圍”解讀和應(yīng)用指導(dǎo)材料(雷澤佳編制-2024)
- 2024-2030年中國散熱產(chǎn)業(yè)運營效益及投資前景預(yù)測報告
- 和父親斷絕聯(lián)系協(xié)議書范本
- 2024時事政治考試題庫(100題)
- 2024地理知識競賽試題
- 《城市軌道交通工程盾構(gòu)吊裝技術(shù)規(guī)程》(征求意見稿)
- DL∕T 5776-2018 水平定向鉆敷設(shè)電力管線技術(shù)規(guī)定
- 【新教材】統(tǒng)編版(2024)七年級上冊語文期末復(fù)習(xí)課件129張
評論
0/150
提交評論