![第2章Java基本語法_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-12/1/ea40a468-43d7-4a98-84a8-f46e639bba7d/ea40a468-43d7-4a98-84a8-f46e639bba7d1.gif)
![第2章Java基本語法_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-12/1/ea40a468-43d7-4a98-84a8-f46e639bba7d/ea40a468-43d7-4a98-84a8-f46e639bba7d2.gif)
![第2章Java基本語法_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-12/1/ea40a468-43d7-4a98-84a8-f46e639bba7d/ea40a468-43d7-4a98-84a8-f46e639bba7d3.gif)
![第2章Java基本語法_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-12/1/ea40a468-43d7-4a98-84a8-f46e639bba7d/ea40a468-43d7-4a98-84a8-f46e639bba7d4.gif)
![第2章Java基本語法_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-12/1/ea40a468-43d7-4a98-84a8-f46e639bba7d/ea40a468-43d7-4a98-84a8-f46e639bba7d5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第2章 java基本語法第2章 java基本語法用戶要想掌握并熟練應(yīng)用java語言,就需要對java語言中的基礎(chǔ)知識進行充分地了解。本章介紹java語言的基本語法,包括數(shù)據(jù)類型、類型轉(zhuǎn)換、拆箱、裝箱、變量、常量、運算符和表達式以及注釋等內(nèi)容。java語言與c#和c+等語言有著相似的地方,因此,學(xué)習(xí)過c#和c+語言的讀者在學(xué)習(xí)本章時會感到很輕松。學(xué)習(xí)目標l 掌握數(shù)據(jù)類型的分類。l 掌握變量的聲明和賦值。l 掌握標識符的命名規(guī)則。l 熟悉兩種基本類型轉(zhuǎn)換。l 掌握算術(shù)運算符和賦值運算符。l 熟悉關(guān)系運算符和邏輯運算符。l 了解位運算符和其他運算符。l 熟悉運算符的優(yōu)先級。l 熟悉java中的關(guān)鍵字
2、。l 掌握java中的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ù)類型是指明變量或表達式的狀態(tài)和行為。java語言中有大量的數(shù)據(jù)類型,大體上可以分為基本數(shù)據(jù)類型(或內(nèi)置數(shù)據(jù)類型)和引用數(shù)據(jù)類型兩類?;緮?shù)據(jù)類型和引用數(shù)據(jù)類型又可以再細分,如圖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(長整型)。所有這些類型都是有符號的、正的或負的整數(shù)。java不支持無符號的、只是正值的整數(shù)。1byte類型byte是最小的整數(shù)類型
4、。對于該類型的變量,內(nèi)存分配給它1個字節(jié)占8位。byte取值范圍在-2727-1之間,即-128127。當操作來自網(wǎng)絡(luò)或文件的數(shù)據(jù)流時,byte類型的變量特別有用;當操作與java的其他內(nèi)置類型不直接兼容原始的二進制數(shù)據(jù)時,byte類型的變量也很有用。【例2-1】下面代碼分別聲明3個byte類型的變量a、b和c:byte a;byte b;byte c;聲明多個變量時,如果變量的類型相同,那么可以一次聲明多個變量,變量之間通過“,”(逗號)進行分隔。如下代碼等價于例2-1中的代碼:byte a,b,c2short類型short是有符號的16位類型,它的范圍在-215215-1之間。short限
5、制數(shù)據(jù)的存儲順序為先高字節(jié),后低字節(jié),這樣在某些機器中程序就會出錯,因此該類型很少使用。【例2-2】下面聲明short類型的a變量和b變量,并為它們指定初始值,代碼如下:short a=12,b=11;3int類型int是最常用的整數(shù)類型,它是有符號的32位類型。int類型的取值范圍在-231231-1之間。如果要聲明用戶年齡、點擊率和銷售量時都可以使用int類型。除了常用的用途外,int類型變量通常用于控制循環(huán)和索引數(shù)組。當需要使用整數(shù)時,int通常是最好的選擇。【例2-3】下面聲明int類型的age變量,并為其指定初始值:int age = 12;4long類型long是有符號的64位類型
6、,其取值范圍在-263263-1之間。對于那些int類型不足以容納期望值的情況,long類型基本上都能解決,它的存儲范圍相當大,當需要很大的整數(shù)時,這使得它顯得很有用。 注意:在為整數(shù)類型的變量賦值時,既可賦值為十進制的整數(shù),也可賦值為八進制或十六進制的整數(shù),但是需要注意變量能夠接受的最大值與最小值,否則會出現(xiàn)錯誤。當給long類型變量賦值時,如果賦予的值大于int類型的最大值或小于int類型的最小值,則需要在數(shù)字后加l或l,以此表示該數(shù)據(jù)為長整型。2.1.3 浮點型浮點型也稱為實型,是指帶有小數(shù)部分的數(shù)據(jù)。當計算需要小數(shù)精度的表達式時可使用浮點型數(shù)據(jù)。java中的浮點型包括float和dou
7、ble兩種。其中float是指單精度浮點型;double是指雙精度浮點型。在表2-2中對這兩種類型的寬度和范圍進行了說明。表2-2 浮點型的寬度和范圍類 型寬度(位)大致范圍double644.9e-3241.8e+308float321.4e-0453.4e+0381float類型float類型表示使用32位存儲的單精度數(shù)值。在某些處理器上,單精度運算速度更快,并且占用的空間是雙精度的一半,但是當數(shù)值非常大或非常小時存儲精度會變得不精確。如果需要小數(shù)部分,并且精度要求不是很高時,float類型的變量是很有用的。例如,表示美元或者美分時可以使用float類型。對于float類型的值,需要在數(shù)字
8、后添加大寫字母f或小寫字母f。2double類型雙精度使用double關(guān)鍵字表示,并使用64位存儲數(shù)值。在針對高精度數(shù)學(xué)運算進行了優(yōu)化的某些現(xiàn)代處理器上,實際上雙精度數(shù)值的運算速度更快。所有常用數(shù)學(xué)函數(shù)(如sin()和sqrt()等)都返回雙精度值。如果需要在很多次迭代運算中保持精度,或是操作非常大的數(shù)值時,double類型是最佳選擇。2.1.4 字符型java語言中的字符類型用來存儲單個字符,它占用16位(兩個字節(jié))的內(nèi)存空間,使用char關(guān)鍵字進行標識。因此,在定義字符類型的變量時,可以使用char關(guān)鍵字。char類型的范圍在065 536之間,沒有負的char值。為char類型
9、的變量賦值時,可以使用單引號或數(shù)字。char類型使用兩個字節(jié)的unicode編碼表示,unicode定義了一個完全國際化的字符集,能夠表示全部人類語言中的所有字符。unicode是數(shù)十種字符集的統(tǒng)一體,如拉丁字符集、希臘字符集、阿拉伯字符集、日文字符集以及韓文字符集等。為此,unicode需要16位寬度。因此,在java中的char是16位類型。 注意:在java的正式規(guī)范中,char被當作整數(shù)類型,這意味著char和int、short、long以及byte位于同一分類中。但是,由于char類型的主要用途是表示unicode字符,因此,通常考慮將char放到單獨的分類中。2.1.5 布爾類型j
10、ava有一個稱為boolean的基本類型,用于表示邏輯值。它只能是兩個可能的值之一:true或false(默認值)。所有關(guān)系運算都返回這種類型的值。對于if和for這類控制語句的條件表達式,也需要boolean類型。java中的true和false不能轉(zhuǎn)換成任何數(shù)字表示形式,即true不等于1,false也不等于0。在java中,只能將布爾類型的值賦給以布爾類型聲明的變量,或者用于使用布爾運算符的表達式中。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章進行詳細介紹)。2類類是面向?qū)ο蟪绦蛟O(shè)計語言中的一個概念,它實際上是對某種類型的對象定義變量和方法的原型。簡單來說,類表示對現(xiàn)實生活中某一類具有共同特征的事物進行抽象,是面向?qū)ο缶幊痰幕A(chǔ)。對于java而言,類是java的核心和本質(zhì),是java語言的基礎(chǔ)(關(guān)于類的知識會在第7章進行詳細介紹)。3接口java中的接口是一系列方法的聲明,是一些方法特征的集合。簡單來說,接口表示一種約定,實現(xiàn)接口的類必須嚴格按照
12、其定義實現(xiàn)每個細節(jié)(關(guān)于接口的知識會在第9章進行詳細介紹)。2.2 變 量java中存在變量和常量,實際上,在數(shù)學(xué)中已經(jīng)涉及了變量和常量。java程序中的變量、常量,與數(shù)學(xué)中的變量、常量意義相同。例如,如果銀行中活期存款的利率為3%,那么3%就是常量,而從銀行中獲得的利息會不斷變化,此時利息就是變量。下面將介紹java中的變量,包括變量的聲明、賦值和作用域等。2.2.1 變量的聲明在java程序中,變量是基本存儲單元。所有的變量在使用之前必須聲明,它通過聯(lián)合標識符、類型以及可選的初始化器來定義,其基本語法如下:type identifier = value , identifier = val
13、ue ;其中,type是java的基本數(shù)據(jù)類型或者是類和接口的名稱;identifier是變量的名稱。可以通過指定一個等號和一個值為初始化變量。初始化表達式的結(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中的變量命名時,變量名稱并不是任意的,它遵循標識符的命名規(guī)則。標識符是指可被用來為類、變量或方法等命名的字符序列。換句話說,標識符就是用用戶自定義的名稱來標識類、變量或方法等。標識符的命名規(guī)則如下。(1) 標識符必須由數(shù)字09、大寫字母az、小寫字母az、下劃線_、美元符號$、人民幣符號¥以及所有在十六進制0xc0前的ascii碼組成。(2) 標識符的名稱必須以字母、下劃線_、美元符號$或者人民幣符號¥開頭。(3) 不能把java中的關(guān)鍵字、保留字等作為標識符。(4) 標識符的長度沒有限制。(5) 標識符區(qū)分大小寫。(6)
15、60; java語言對字母的大小寫有嚴格的要求,而且標識符的命名最好能反映它的作用。例如,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;另一種是先聲明后賦值?!纠?-6】下面首先聲明int類型的age變量,聲明時為其指定初始值8,然后聲明double類型的price變量,聲明后將其賦值為12.5。示例代碼如下:int age = 8;/聲明age變量并賦值double price
17、;/聲明price變量price = 12.5;/為price變量賦值 注意:如果只聲明變量而不賦值,系統(tǒng)將會使用默認值進行初始化。如byte、short、int、long類型的默認值為0;double和float類型的默認值為0.0;boolean類型的默認值為false;所有引用類型的默認值為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、局部變量,它們只在當前的方法內(nèi)有效,不能用于類的其他方法中。在方法的代碼塊(如if語句塊)中聲明的變量也是局部變量,它只在該代碼塊內(nèi)有效。局部變量的生命周期取決于方法,當方法被調(diào)用時,java虛擬機為方法中的局部變量分配內(nèi)存空間;當方法的調(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 常 量如果需要存儲在程序運行時可以修改的值,使用變量很有用。對于在程序運行過程中一直不變,即不需要修改的值,可以用一種特殊的變量常量。常量是一種標識符,它只在聲明時進行定
21、義,一旦定義就不允許在程序運行時再改變其值。常量一般都以大寫字母表示,并使用final關(guā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ù)之間進行,并且必須是由低精度類型向高精度類型轉(zhuǎn)換。簡單來說,自動類型轉(zhuǎn)換就是將小范圍的數(shù)據(jù)類型轉(zhuǎn)換成大范圍的數(shù)據(jù)類型。自動類型轉(zhuǎn)換適合于整數(shù)類型、字符型和浮點型。在運算中,不同類型的數(shù)據(jù)先轉(zhuǎ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(最高)?!纠?-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)換是將高精度類型向低精度類型進行轉(zhuǎn)換。在進行強制類型轉(zhuǎn)換時,需要注意的是如果將高精度數(shù)據(jù)向低精度數(shù)據(jù)進行類型轉(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、標類型 變量 = (目標類型)表達式;【例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 運算符和表達式表達式是由變量、常量和方法等通過運算符連接起來而形成的一個有意義的算式。而運算符就是在用變量或常量進行運算時經(jīng)常使用的符號。根據(jù)操作數(shù)的數(shù)目來分,運算符可以分為一元運算符、二元運算符和三元運算符。根據(jù)功能來分,運算符可以分為算術(shù)運算符、賦值運算符、比較運算符、邏輯運算符以及位運算符等。2.5.1 算術(shù)運算符java中的算術(shù)運算符包括+(加號)、-(減號)、*(乘號)、/(除號)和%(求余)5種。這些運算符與大家平常接觸的數(shù)學(xué)運算符具有相同的含義,這里不再詳細解釋說明。算術(shù)運算符支
27、持整型和浮點型數(shù)據(jù)的運算。當使用運算符把兩個操作數(shù)結(jié)合到一起時,首先會將兩個操作數(shù)轉(zhuǎn)換成相同類型的數(shù)據(jù)。(1) 兩個操作數(shù)中如果有一個是double類型,那么另一個操作數(shù)一定會先轉(zhuǎn)換成double類型,然后再進行運算。(2) 兩個操作數(shù)中如果有一個是float類型,那么另一個操作數(shù)一定會先轉(zhuǎn)換成float類型,然后再進行運算。(3) 兩個操作數(shù)中如果有一個是long類型,那么另一個操作數(shù)一定會先轉(zhuǎn)換成long類型,然后再進行運算。(4) 其他任何兩個基本類型的數(shù)據(jù)操作,兩個操作數(shù)都會自動轉(zhuǎn)換成int類型?!纠?-12】分別聲明double、int、float、byte和short類型的變量,然
28、后分別使用本節(jié)介紹的算術(shù)運算符進行計算。示例代碼如下: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變量進行加法運算,由于score是double類型,因此會先將int類型的age變量轉(zhuǎn)換為double類型,然后再進行計算。對score和num變量進行減法運算,由于num是float類型,因此會先將double類型的score變量轉(zhuǎn)換為float類型,然后再進行計算。運行上述代碼,結(jié)果如下:90.5+100=190.590.5-12.5=78.0100*10=1000100/12.5=0.90510%12=102.5.2 賦值運算符賦值就是將數(shù)值賦給變量,而這個賦值運算符就充當了這個賦值的任務(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類型值。當表達式有關(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,分別對其進行賦值,并使用關(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ù)進行操作,因此
35、,返回的結(jié)果也是布爾類型的值。java語言中的邏輯運算符包括3種,如表2-6所示。表2-6 邏輯運算符運 算 符說 明&&邏輯與,二元運算符。前面兩個條件都為真時,返回值為true,否則返回false|邏輯或,二元運算符。前面兩個條件有一個為真時,返回值為true,否則返回false!邏輯非,一元運算符。表示否定,!true等于false;!false等于true 注意:當操作元都為布爾類型的數(shù)據(jù)時,位運算符包括的&和|也被視為邏輯運算符,它們的運算規(guī)則與&&和|是相同的,但是在計算運算符兩邊的表達式時存在著差別。使用不同的邏輯運算符,其運算規(guī)則也會有所
36、不同,如表2-7所示為邏輯運算的可能結(jié)果。表2-7 邏輯運算符進行邏輯運算的結(jié)果條件1的返回結(jié)果條件2的返回結(jié)果&&運算結(jié)果|運算結(jié)果!條件1的結(jié)果truetruetruetruefalsetruefalsefalsetruefalsefalsetruefalsetruetruefalsefalsefalsefalsetrue【例2-14】定義int類型的變量num1、num2和num3,分別對其進行賦值,并使用邏輯運算符&&、|和!進行運算。示例代碼如下: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)存中存儲的二進制數(shù)據(jù)流中的位進行操作的。java語言中的位運算符又分為按位運算符和移位運算符。1按位運算符按位運算符是對整數(shù)的二進制數(shù)據(jù)流中的每個位進行運算,該運算符包括4種運算,如表2-8所示。表2-8 按位運算符及其運算規(guī)則運 算 符說 明運算規(guī)則(0和1分別表示二進制位置)&按位與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中可以看出,按位與運算的兩個二進制位數(shù)都為1時,結(jié)果才為1,否則結(jié)果為0;按位或運算只要有一個二進制位數(shù)為1,則結(jié)果為1,否則為0;按位異或運算的兩個二進制位數(shù)相同(同時為0或1)時,結(jié)果為0,否則為1;按位取反運算符為一元運算符,取反運算是將二進制中的0變?yōu)?,1變?yōu)?。【例2-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的二進制數(shù)是110,9的二進制數(shù)是1001,將6的二進制數(shù)前面補0變成0110,分別對它們的二進制位數(shù)進行&運算,運算結(jié)果為00
42、00,即0,0的十進制數(shù)仍然為0,因此輸出0。以6|9為例,將6和9的二進制位數(shù)分別進行|運算,結(jié)果為1111,1111的十進制數(shù)為15,因此輸出15。 提示:在java中,可以將按位運算符與賦值運算符“=”組合為復(fù)合賦值運算符。例如,num&=6等價于num=num&6,其中num是一個變量。2移位運算符移位運算符也是對整數(shù)的二進制表示中的位進行操作。java中的移位運算包括3種,分別為左移位運算、有符號整數(shù)的右移位運算和無符號整數(shù)的右移位運算。l 左移位運算:以m<<n為例,將整數(shù)m的二進制數(shù)向左移動整數(shù)n指定的位數(shù),并用n個0補充二進制數(shù)據(jù)。其實,向左移n位,
43、就相當于乘以2的n次方。l 有符號右移位運算:以m>>n為例,將整數(shù)m的二進制數(shù)向右移動整數(shù)n指定的位數(shù),并用n個符號位補充二進制數(shù)的開頭(負數(shù)的符號位為1,正數(shù)為0)。其實右移n位,相當于除以2的n次方。l 無符號右移位運算:以m>>>n為例,將整數(shù)m的二進制數(shù)向右移動整數(shù)n指定的位數(shù),并用n個符號位補充二進制數(shù)的開頭(負數(shù)的符號位為1,正數(shù)為0)。2.5.6 其他運算符除了前面小節(jié)介紹的幾種運算符外,java還提供了其他的運算符,如:自增運算符、自減運算符以及三元運算符。從某種意義上來說,可以將自增運算符和自減運算符看作是算術(shù)運算符。1自增運算符自增運算符是自
44、動將變量值加1。它又分為兩種:一種是前自加,先進行加1運算,再賦值,即+a;另一種是后自加,先賦值,然后再進行加1運算,即a+。運算符放在不同的位置,最終得到的結(jié)果也是不同的:前自加會將變量值加1,然后再使用該變量參與表達式的運算;后自加會將變量值參與表達式的運算,然后再將變量值加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進行前自加運算,因此先將原來的值輸出,再加上1,變成11參與后面的運算。由于變量b進行后自加運算,因此會將原來的值加上1,再進行輸出。此時變量b的值變成11后再參與后面的運算。2自減運算符自減運算符是自動將變量值減1。與自加運
46、算符一樣,自減運算符也分為兩種:一種是前自減,先進行減1運算,再賦值,即-a;另一種是后自減,先賦值,然后再進行減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 注意:自增和自減運算符只能操作變量,不能操作常量或表達式,且該變量類型必須是整型、浮點型或java包裝類型,如(num+2)+是不正確的。3三元運算符java中使用?:表示三元運算符?;拘问饺缦拢翰紶柋磉_式 ? 表達式1 : 表達式2;在上述語法中,如果?左邊的布爾表達式的值為true,則整個表達式的值為“表達式1”的值;否則為“表達式2”的值。使用三元運算符,“表達式1”和表達式并不會都被執(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)先級一個表達式中可以存在多個運算符,當需要進行混合運算時,系統(tǒng)會根據(jù)運算符的優(yōu)先級來決定執(zhí)行順序。優(yōu)先級不同會導(dǎo)致最后得出的結(jié)果差別很大,如表2-9列出了運算符的優(yōu)先級別。表2-9 運算符的優(yōu)先級別優(yōu) 先 級說 明運 算 符最高括號()自上向下優(yōu)先級別降低后置運算符正負號+、-一元
50、運算符+、-、!乘除*、/、%加減+、-移位運算>>、>>>、<<比較大小>、>=、<、<=比較是否相等=、!=按位與運算&按位異或運算續(xù)表優(yōu) 先 級說 明運 算 符自上向下優(yōu)先級別降低按位或運算|邏輯與運算&&邏輯或運算|三元運算符?:最低賦值及復(fù)合賦值運算=、+=、-=、*=、/=、%=、>>=、>>>=、<<=、&=、=、|=在表2-9所列運算符的優(yōu)先級中,運算符的優(yōu)先級自上而下逐漸降低。其中,優(yōu)先級最高的是之前未提到的括號,它的使用與數(shù)學(xué)運算中的括
51、號一樣,用來指定括號內(nèi)的表達式要優(yōu)先處理,括號內(nèi)的多個運算符仍然要依照表2-9的優(yōu)先級順序進行運算。對于處在同一層級的運算符,則按照它們的結(jié)合性,即“先左后右”或是“先右后左”的順序來執(zhí)行。java中除賦值運算符的結(jié)合性為“先右后左”外,其他運算符的結(jié)合性都是“先左后右”。2.6 關(guān)鍵字列表在2.2.1節(jié)介紹標識符的命名規(guī)則中提到過,標識符的名稱不能是java的關(guān)鍵字。簡單來說,關(guān)鍵字是java語言中已經(jīng)被賦予特定意義的一些單詞,不可以再把這些單詞定義為標識符來使用。例如,在前面介紹的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)程序員在編程時注意一些細節(jié)問題的良好習(xí)慣,提高程序的可讀性,讓程序員能夠盡快地理解新的代碼,并幫助大家編寫出規(guī)范的、利于維護的java代碼。2.7.1 代碼編寫規(guī)則規(guī)整的代碼格式能夠為程序的開發(fā)和后期代碼的維護帶來方便。因此,在學(xué)習(xí)開發(fā)的過程中,要形成規(guī)范代碼編寫格式的良好習(xí)慣,編寫代碼時應(yīng)該注意以下幾點。l 在聲明變量時,盡量使每個變量的聲明單獨占一行,即使是聲明相同類型的變量,這樣做也有助于加入注釋。局部變量應(yīng)在聲明的同時進行初始化,在類型和標識符號之間可以使用空格或制表符。聲明兩個變量,每個變量獨占一行,并使用制表符使變
54、量名對齊。示例代碼如下:intage = 12;doubleprice = 12;l 語句應(yīng)以英文狀態(tài)下的分號“;”結(jié)束,且應(yīng)使每條語句單獨占一行。在寫返回語句時,書寫形式為return value,如果以表達式形式存在,則應(yīng)該使用小括號。示例代碼如下:return false;return (10>20)?"10大于20":"10小于20");l 盡量不要使用技巧性很高,難懂又容易混淆判斷的語句,否則會給后期程序的維護帶來困難,因為很難保證程序的開發(fā)與維護是同一個人。l 代碼進行縮進時應(yīng)使用制表符來代替空格。l 編寫代碼時,要適當?shù)厥褂每招蟹指舸?/p>
55、碼,并且應(yīng)在難以理解或關(guān)鍵的部分加入注釋,這有助于閱讀者很快地了解代碼的結(jié)構(gòu)。2.7.2 常用代碼注釋在java的編寫過程中需要對一些程序進行注釋,除了自己方便閱讀外,也讓別人更好地理解自己的程序。注釋可以是編程思路或者是程序的作用,總而言之就是方便自己與他人更好地閱讀。在java源文件的任意位置都可以加入注釋,java編譯器會忽略程序中的注釋語句。因此,在注釋語句中編寫的任何東西,對編譯出來的程序不會有任何影響。java語言提供了3種形式的注釋,即單行注釋、多行注釋和文檔注釋。1單行注釋單行注釋用于注釋一行,使用/符號開始,一直到換行為止的所有內(nèi)容均作為注釋而被編譯器忽略。語法如下:/注釋內(nèi)容【例2-19】定義double類型的3個變量,并對這3個變量進行注釋。示例代碼如下: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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 國際海運合同環(huán)境保護要求
- 戶外運動中心裝修合同
- 快速響應(yīng)運輸合同模板設(shè)計
- 展覽館裝修大包合同樣本
- 文化中心裝修班組合作協(xié)議
- 滑雪場土石方合同樣本
- 旅游導(dǎo)游人才獵頭協(xié)議
- 冷藏乳制品分銷協(xié)議
- 會展中心別墅裝修合同樣本
- 影視制作公司裝修合同
- 生姜高產(chǎn)種植技術(shù)專題培訓(xùn)課件
- 《社會主義市場經(jīng)濟理論(第三版)》第八章社會主義市場經(jīng)濟調(diào)控論
- 交流伺服系統(tǒng)常見故障及處理分解課件
- 水土保持單元工程質(zhì)量評定表
- 圣三國蜀漢傳攻略
- 2021屆高考英語887核心詞(打印、詞頻、出處、例句、背誦)
- 天津市鄉(xiāng)鎮(zhèn)衛(wèi)生院街道社區(qū)衛(wèi)生服務(wù)中心地址醫(yī)療機構(gòu)名單
- 公司機關(guān)管理類責(zé)任矩陣
- 山東省青島市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細及行政區(qū)劃代碼
- 《鉆井液用磺甲基酚醛樹脂技術(shù)要求》
- 數(shù)學(xué)-九宮數(shù)獨100題(附答案)
評論
0/150
提交評論