第2章 Java語法基礎(chǔ)_第1頁
第2章 Java語法基礎(chǔ)_第2頁
第2章 Java語法基礎(chǔ)_第3頁
第2章 Java語法基礎(chǔ)_第4頁
第2章 Java語法基礎(chǔ)_第5頁
已閱讀5頁,還剩59頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第第2 2章章 Java Java語法基礎(chǔ)語法基礎(chǔ)2.4 數(shù)組 2.1 常量和變量 2.2 運(yùn)算符和表達(dá)式 2.3 流程控制2 . 1 常量和變量常量和變量2.1.1 數(shù)據(jù)類型數(shù)據(jù)類型各基本數(shù)據(jù)類型的大小及取值范圍。如表2.1數(shù) 據(jù) 類 型關(guān) 鍵 字在內(nèi)存占用的字節(jié)數(shù)取 值 范 圍默 認(rèn) 值布爾型boolean1個(gè)字節(jié)(8位)true、falsefalse字節(jié)型byte1個(gè)字節(jié)(8位)-128127(byte)0短整型short2個(gè)字節(jié)(16位)-215215-1(short)0整型int4個(gè)字節(jié)(32位)-231231-10長整型long8個(gè)字節(jié)(64位)-263263-10L字符型char

2、2個(gè)字節(jié)(16位)u0000uffffu0000單精度浮點(diǎn)型float4個(gè)字節(jié)(32位)-3.4028E+38-1.4013E-45和1.4013E-453.4028E+380.0F雙精度浮點(diǎn)型double8個(gè)字節(jié)(64位)-1.7977E+308-4.9E-324和4.9E-3241.7977E+3080.0D2.1.2 2.1.2 標(biāo)識符和關(guān)鍵字標(biāo)識符和關(guān)鍵字標(biāo)識符是指程序中包、類、接口、變量或方法名字的字符序列。Java語言要求標(biāo)識符必須符合以下命名規(guī)則。l標(biāo)識符由數(shù)字(09)、大寫字母(AZ)、小寫字母(az)、下劃線“_”以及美元符號“$”等組成,并且長度不受限制。l標(biāo)識符的首字符必

3、須是字母、下劃線“_”或美元符號“$”。l不能把關(guān)鍵字和保留字作為標(biāo)識符。l標(biāo)識符是大小寫敏感的,例如,hello與Hello是兩個(gè)不同的標(biāo)識符。2.1.2 2.1.2 標(biāo)識符和關(guān)鍵字標(biāo)識符和關(guān)鍵字合法的標(biāo)識符非法的標(biāo)識符說 明HelloWorldclass不能用關(guān)鍵字做標(biāo)識符_12312.3b標(biāo)識符不能以數(shù)字開頭$a123Hello World標(biāo)識符中不能含有空格SubjectSubject#標(biāo)識符中不能含有“#”表2.2是一個(gè)標(biāo)識符正誤對照表,列舉了一些合法的標(biāo)識符和非法標(biāo)識符。2.1.2 2.1.2 標(biāo)識符和關(guān)鍵字標(biāo)識符和關(guān)鍵字 在命名Java標(biāo)識符時(shí),應(yīng)做到“見名知意”。Java中一些

4、被賦予特定含義、用作專門用途的字符序列稱為關(guān)鍵字,包括:l 數(shù)據(jù)類型:boolean、byte、short、int、long、char、float、double。l 包引入和聲明:import、package。l 類和接口聲明:class、extends、implements、interface。l 流程控制:if、else、switch、do、while、case、break、continue、return、default、while、for。l 異常處理:try、catch、finally、throw、throws。l 修飾符:abstract、final、native、private、p

5、rotected、public、static、synchronized、transient、volatile。l 其他:new、instanceof、this、super、void、assert、const*、enum、goto*、strictfp。2.1.3 2.1.3 常量常量1布爾型常量(布爾型常量(boolean) 布爾型常量值只有true或false,它們也可看成是Java語言的關(guān)鍵字,不能挪作他用且必須小寫。true表示“邏輯真”,false表示“邏輯假”。 2整型常量(整型常量(int或或long)整型常量有十進(jìn)制、八進(jìn)制、十六進(jìn)制三種表示法:(1)十進(jìn)制十進(jìn)制:十進(jìn)制整數(shù),如1

6、23、-48等。(2)八進(jìn)制八進(jìn)制:以數(shù)字0開頭的八進(jìn)制整數(shù),如017、-021等。(3)十六進(jìn)制十六進(jìn)制:以0 x或0X開頭的十六進(jìn)制整數(shù),如0 x12a6、0XAB12、-0 x1a0等。2.1.3 2.1.3 常量常量3浮點(diǎn)型常量(浮點(diǎn)型常量(float或或double)(1)十進(jìn)制小數(shù)形式十進(jìn)制小數(shù)形式:小數(shù)點(diǎn)兩邊的數(shù)字不能同時(shí)省略且小數(shù)點(diǎn)不能省略。合法的double型浮點(diǎn)數(shù)如3.14、1.0。(2)科學(xué)記數(shù)法形式科學(xué)記數(shù)法形式:如1.2610-21在Java中表示為1.26e-21或1.26E-21,這是一個(gè)double型的浮點(diǎn)數(shù)。E或e的前面必須有數(shù)字且E或e后邊必須是一個(gè)正/負(fù)整

7、數(shù)(正號可省略)。由于E或e的后邊必須是一個(gè)整數(shù),那么1.2610-2.65該如何表示?可用java.lang.Math類中的方法pow(),表示為:Math.pow(1.26,-2.65)。2.1.3 2.1.3 常量常量4字符型常量(字符型常量(char)(1)對于可輸入字符,用單引號將字符括起來,如,a、啊 等。(2)對于不可輸入字符,常采用轉(zhuǎn)義字符表示。n表示換行,其Unicode值是10。r表示回車,其Unicode值是13。t表示Tab鍵,其Unicode值是9。ddd表示用3位八進(jìn)制數(shù)代表的ASCII字符,從000377,可表示256個(gè)ASCII字符。uxxxx表示用4位十六進(jìn)制

8、數(shù)代表Unicode字符,從u0000uffff,可表示所有的Unicode字符,其中的u可以任意多個(gè)連續(xù)。例如,uuuu5de5與u5de5相同。表示字符“”,即u0027。表示字符“”,即u0022。表示字符“”,即u005c。例如,字符串a(chǎn)漢bu0067t067字表示“a漢bgt7字”。2.1.3 2.1.3 常量常量5字符串常量(字符串常量(String)Java中字符串實(shí)際上是字符串類java.lang.String的一個(gè)對象,所有字符串常量值都用雙引號括起來,如abc。由于abc是一個(gè)對象,故它可以使用類String中的方法,如a漢b字c.length()返回該串的長度5,而a漢b

9、字c.charAt(3)返回下標(biāo)值3所對應(yīng)的字符:字(下標(biāo)值的起點(diǎn)從0開始)。2.1.4 2.1.4 變量變量1boolean類型類型boolean類型的變量取值只能是true或false。在JVM內(nèi)部,用int或byte類型來表示boolean,用整數(shù)零表示false,用任意一個(gè)非零整數(shù)來表示true。只不過這些對程序員是透明的。2byte、short、int和和long類型類型byte、short、int和long都是整數(shù)類型,并且都是有符號整數(shù)。在定義這4種類型的整型變量時(shí),Java編譯器給它們分配的內(nèi)存空間大小是不同的。byte類型占用的內(nèi)存空間最?。?個(gè)字節(jié)),long類型占用的內(nèi)存

10、空間最大(8個(gè)字節(jié))。如果一個(gè)整數(shù)值在某種整數(shù)類型的取值范圍內(nèi),就可以把它直接賦給該類型的變量,否則必須進(jìn)行強(qiáng)制類型轉(zhuǎn)換。例如,整數(shù)13在byte類型的取值范圍(-128127)內(nèi),可以把它直接賦給byte類型變量;129不在byte類型的取值范圍內(nèi),若想賦值,就必須進(jìn)行強(qiáng)制類型轉(zhuǎn)換,語句如下:byte b = (byte)129/變量b的取值為-1272.1.4 2.1.4 變量變量3char類型與字符編碼類型與字符編碼char是字符類型,Java語言對字符采用Unicode編碼,這是一種雙字節(jié)編碼,表示字符范圍u0000uffff。由于計(jì)算機(jī)只能存儲二進(jìn)制數(shù)據(jù),因此必須為各個(gè)字符進(jìn)行編碼。

11、所謂字符編碼,是指用一串二進(jìn)制數(shù)據(jù)來表示特定的字符。Unicode字符編碼由國際Unicode協(xié)會編制,是一種跨平臺的字符編碼。4float和和double類型類型float和double類型都遵循IEEE 754標(biāo)準(zhǔn),該標(biāo)準(zhǔn)分別為32位和64位浮點(diǎn)數(shù)規(guī)定了二進(jìn)制數(shù)據(jù)表示形式。IEEE 754采用二進(jìn)制數(shù)據(jù)的科學(xué)記數(shù)法來表示浮點(diǎn)數(shù)。對于float浮點(diǎn)數(shù),用1位表示數(shù)字的符號,用8位表示指數(shù)(底數(shù)為2),用23位表示尾數(shù)。對于double浮點(diǎn)數(shù),用1位表示數(shù)字的符號,用11位表示指數(shù)(底數(shù)為2),用52位表示尾數(shù)。2.1.5 2.1.5 類型轉(zhuǎn)換類型轉(zhuǎn)換1寬轉(zhuǎn)換所謂的寬轉(zhuǎn)換又稱自動(dòng)類型轉(zhuǎn)換或隱式

12、轉(zhuǎn)換。轉(zhuǎn)換規(guī)則如下:(1)byte可直接轉(zhuǎn)換到short、int、long、float、double;(2)short可直接轉(zhuǎn)換到int、long、float、double;(3)char 可直接轉(zhuǎn)換到int、long、float、double;(4)int可直接轉(zhuǎn)換到long、float、double;(5)long可直接轉(zhuǎn)換到float、double;(6)float可直接轉(zhuǎn)換到double。2.1.5 2.1.5 類型轉(zhuǎn)換類型轉(zhuǎn)換2窄轉(zhuǎn)換窄轉(zhuǎn)換窄轉(zhuǎn)換的轉(zhuǎn)換規(guī)則如下:(1)short可直接轉(zhuǎn)換到byte、char;(2)char可直接轉(zhuǎn)換到byte、short;(3)int 可直接轉(zhuǎn)換到b

13、yte、short、char;(4)long可直接轉(zhuǎn)換到byte、short、char、int;(5)float可直接轉(zhuǎn)換到byte、short、char、int、long;(6)double可直接轉(zhuǎn)換到byte、short、char、int、long、float。2.1.5 2.1.5 類型轉(zhuǎn)換類型轉(zhuǎn)換3寬窄同時(shí)轉(zhuǎn)換寬窄同時(shí)轉(zhuǎn)換寬窄同時(shí)轉(zhuǎn)換發(fā)生在byte轉(zhuǎn)換到char期間,其轉(zhuǎn)換過程為:先將byte寬轉(zhuǎn)換到int,再將int窄轉(zhuǎn)換到char。上述所講的基本數(shù)據(jù)類型的3種轉(zhuǎn)換在Java程序中經(jīng)常發(fā)生。例如,當(dāng)將一個(gè)表達(dá)式的值賦給一個(gè)變量時(shí)(稱為賦值類型轉(zhuǎn)換上下文),會自動(dòng)進(jìn)行“寬轉(zhuǎn)換”和某些特

14、定的“窄轉(zhuǎn)換”。例如下面的代碼片段:byte b = 2;short s;s = + b;表達(dá)式+b是byte類型,而s是short類型,因而期望賦值符“=”右部出現(xiàn)的short類型。自動(dòng)執(zhí)行“寬轉(zhuǎn)換”,將byte轉(zhuǎn)換為short。2.1.5 2.1.5 類型轉(zhuǎn)換類型轉(zhuǎn)換另外一種經(jīng)常發(fā)生的類型轉(zhuǎn)換上下文是“數(shù)值提升”。當(dāng)使用算術(shù)運(yùn)算符(+,-,*,/,%)、關(guān)系運(yùn)算符(,=,=,!=)、位運(yùn)算符(&,|,、=、 c 等效于a = = (b c)。在Java中,任何類型的數(shù)據(jù)(無論是基本數(shù)據(jù)類型還是引用類型)都可以通過=或!=來比較是否相等或不等。如布爾類型值 true= =false

15、運(yùn)算結(jié)果是:false。只有char、byte、short、int、long、float、double類型才能用于前四種關(guān)系運(yùn)算。2.2.1 2.2.1 運(yùn)算符運(yùn)算符 3邏輯運(yùn)算符邏輯運(yùn)算符布爾邏輯運(yùn)算符用于將多個(gè)關(guān)系表達(dá)式或true 、false組成一個(gè)邏輯表達(dá)式。Java中的邏輯運(yùn)算符有:&(與)、|(或)、!(非)、(異或)、&(短路與)、(短路或)。a & b:只有a 與b都為true ,結(jié)果才為true;有一個(gè)為false,結(jié)果就為false。a | b:只有a與b都為false,結(jié)果才為false;有一個(gè)為true,結(jié)果就為true。! a:與a的值相反。J

16、ava中邏輯表達(dá)式進(jìn)行所謂的“短路”計(jì)算。2.2.1 2.2.1 運(yùn)算符運(yùn)算符 【例2.3】測試邏輯運(yùn)算符的作用。 LogicTest.javapublic class LogicTest public static void main(String args) boolean a,b,c; a = true; b = false; c = a & b; System.out.println(c); c = a | b; System.out.println(c); c = a b; System.out.println(c); c =!a; System.out.println(c)

17、; c = a & b; System.out.println(c); c = a |b; System.out.println(c); 2.2.1 2.2.1 運(yùn)算符運(yùn)算符 程序運(yùn)行結(jié)果:程序運(yùn)行結(jié)果:falsetruetruefalsefalsetrue2.2.1 2.2.1 運(yùn)算符運(yùn)算符 4位運(yùn)算符位運(yùn)算符Java中共有下列7種位運(yùn)算符。(1)按位求反運(yùn)算符:按位求反運(yùn)算符:是單目運(yùn)算符,對操作數(shù)的二進(jìn)制數(shù)據(jù)的每一個(gè)二進(jìn)制位都取反。即1變成0,0變成1。例如, 10010011 結(jié)果是01101100。(2)與運(yùn)算符:與運(yùn)算符:&參與運(yùn)算的兩個(gè)操作數(shù),相應(yīng)的二進(jìn)制數(shù)位進(jìn)行

18、與運(yùn)算。即0 & 0 = 0,0 & 1 = 0,1 & 0 = 0,1 & 1 = 1。(3)或運(yùn)算符:或運(yùn)算符:|參與運(yùn)算的兩個(gè)操作數(shù),相應(yīng)的二進(jìn)制數(shù)位進(jìn)行或運(yùn)算。即0 | 0 = 0,0 | 1 = 1,1 | 0 = 1,1 | 1 = 1。(4)異或運(yùn)算符:異或運(yùn)算符: 參與運(yùn)算的兩個(gè)操作數(shù),相應(yīng)的二進(jìn)制數(shù)位進(jìn)行異或運(yùn)算。即00=0,10=1,01=1,11=0(即不相同是1,相同是0)。2.2.1 2.2.1 運(yùn)算符運(yùn)算符 (5)保留符號位的右移運(yùn)算符:保留符號位的右移運(yùn)算符:將一個(gè)操作數(shù)的各個(gè)二進(jìn)制位全部向右移若干位,左邊空出的位全部用最高位的符號

19、位來填充。(6)不保留符號位的右移運(yùn)算符:不保留符號位的右移運(yùn)算符:與不同的是,右移后左邊空出的位用0填充。同樣在移位之前,自動(dòng)先對所要移動(dòng)的位的個(gè)數(shù)進(jìn)行除以32(或64)取余數(shù)的運(yùn)算,然后再進(jìn)行右移。即若a是int型,則a n就是a (n%32);若a是long型,則a n就是a (n%64)。(7)左移運(yùn)算符:左移運(yùn)算符:將一個(gè)操作數(shù)的所有二進(jìn)制位向左移若干位,右邊空出的位填0。同樣,在移位之前,自動(dòng)先對所要移動(dòng)的位的個(gè)數(shù)進(jìn)行除以32(或64)取余數(shù)的運(yùn)算,然后再進(jìn)行左移。即若a是int型,則a n就是a (n%32);若a是long型,則a n就是a =op1 = op2op1 = (T

20、)(op1 op2)=op1 = op2op1 = (T)(op1 =op1 = op2op1 = (T)(op1 op2)2.2.1 2.2.1 運(yùn)算符運(yùn)算符 6條件運(yùn)算符條件運(yùn)算符條件運(yùn)算符?:是三目運(yùn)算符,其格式是: e1?e2:e3其中e1是一個(gè)布爾表達(dá)式,若e1的值是true,則計(jì)算表達(dá)式e2的值,且該值即為整個(gè)條件運(yùn)算表達(dá)式的值;否則計(jì)算表達(dá)式e3的值,且該值即為整個(gè)條件運(yùn)算表達(dá)式的值2.2.2 2.2.2 表達(dá)式表達(dá)式表達(dá)式是符合一定語法規(guī)則的運(yùn)算符和操作數(shù)的序列。一個(gè)常量、變量也可認(rèn)為是一個(gè)表達(dá)式,該常量或變量的值即為整個(gè)表達(dá)式的值。一個(gè)合法的Java表達(dá)式經(jīng)計(jì)算后,應(yīng)該有一個(gè)

21、確定的值和類型。唯一的例外是方法調(diào)用時(shí),該方法的返回值類型可被定義為void。通常,不同運(yùn)算符構(gòu)成不同的表達(dá)式。例如,關(guān)系運(yùn)算符、=等構(gòu)成關(guān)系表達(dá)式,關(guān)系表達(dá)式的值只能取true或false,類型為boolean型。2.3 2.3 流程控制流程控制2.3.1 分支語句分支語句分支語句使部分程序代碼在滿足特定條件時(shí)才會被執(zhí)行。Java語言支持兩種分支語句:if else 語句和switch語句。1if else 語句語句if語句又稱為條件語句,其語法格式為:if () ; else ; 其中:及可以是任何語句(包括復(fù)合語句),else部分可以有,也可以沒有。及位置可以是多個(gè)語句,此時(shí)需要用 括起

22、。 2.3.1 2.3.1 分支語句分支語句if語句的語義是:首先計(jì)算的值,若值是true,則執(zhí)行,當(dāng)執(zhí)行完成,整個(gè)if語句也就結(jié)束了;當(dāng)?shù)闹凳莊alse時(shí),執(zhí)行else部分的,當(dāng)執(zhí)行完成,整個(gè)if語句執(zhí)行結(jié)束。由于if語句中的或可以是任何語句,故當(dāng)它們又是另一個(gè)if語句時(shí),就產(chǎn)生了if語句的嵌套,例如下面的代碼片段:if (a1) if (b10) System.out.println(a+b); else / 此處的else與哪一個(gè)if相配? System.out.println(a-b);這個(gè)嵌套的if語句產(chǎn)生了二義性,else究竟與哪一個(gè)if相配呢?Java語言規(guī)定:else與最近的沒

23、有配上else的if相配,故上述else與第二個(gè)if相配。若要使它與第一個(gè)if相配,必須修改代碼如下:if (a1) / 加上一對,形成一條復(fù)合語句 if (b10) System.out.println(a+b); else / 此處的else與第一個(gè)if相配 System.out.println(a-b);2.3.1 2.3.1 分支語句分支語句【例2.4】設(shè)計(jì)一個(gè)Java程序,判斷某一年份是否閏年。LeapYear.javapublic class LeapYear public static void main(String args)/ args0表示命令行的第一個(gè)參數(shù)并把它由字符串

24、轉(zhuǎn)換為整型int year = Integer.parseInt(args0);int leap;/ 1表示是閏年,0表示不是閏年if(year % 4 = 0)/ 判斷能否被4整除if (year %100 =0)if (year %400=0)leap = 1;else leap = 0;else leap =1;/ 是閏年else leap = 0;if (leap=1)System.out.println(year +年是閏年);else System.out.println(year +年不是閏年);2.3.1 2.3.1 分支語句分支語句右擊“LeapYear.java”,選擇“R

25、un As”“Run Configurations”命令,彈出窗口如圖2.1所示,在“Main”標(biāo)簽頁的“Project”欄中選擇“MyProject_02”,單擊“Main class”欄右側(cè)的“Search”按鈕,彈出對話框中選“LeapYear”。2.3.1 2.3.1 分支語句分支語句程序運(yùn)行結(jié)果:2016年是閏年按照上面同樣的方式,在“Program argumentds”欄輸入“2015”,單擊“Run”按鈕運(yùn)行程序,結(jié)果為:2015年不是閏年2.3.1 2.3.1 分支語句分支語句2switch語句語句當(dāng)程序有多個(gè)分支(通常超過兩個(gè))時(shí),使用switch語句比使用多個(gè)嵌套的if語

26、句更簡明些。switch語句的語法格式如下:switch() case : case : case : default:其中:最終值的類型必須是int型或者是能自動(dòng)轉(zhuǎn)換成int型的類型,如byte、short、char、int,否則必須進(jìn)行強(qiáng)制類型轉(zhuǎn)換,但Java7開始增強(qiáng)了switch語句功能,也允許值是java.lang.String的字符串類型。2.3.1 2.3.1 分支語句分支語句【例2.5】用switch語句判斷當(dāng)前的季節(jié)。TestSwitch.javapublic class TestSwitch public static void main(String args) /聲明變

27、量xString x = args0;/ 直接用字符串型的args0參數(shù)作switch的控制表達(dá)式,無須轉(zhuǎn)換類型switch (x) case 春天:System.out.println(春天般的溫暖);break;case 夏天:System.out.println(夏天一樣火熱);break;case 秋天:System.out.println(秋風(fēng)掃落葉一般);break;default:System.out.println(嚴(yán)冬一樣殘酷無情!);2.3.2 2.3.2 循環(huán)語句循環(huán)語句循環(huán)語句一般應(yīng)包括如下4部分內(nèi)容:(1)初始化部分:用來設(shè)置循環(huán)的一些初始條件,比如設(shè)置循環(huán)控制變量的

28、初始值。(2)循環(huán)條件:這是一個(gè)布爾表達(dá)式,每一次循環(huán)都要對該表達(dá)式求值,以判斷是否繼續(xù)循環(huán)。(3)循環(huán)體:這是循環(huán)操作的主體內(nèi)容,可以是一條語句,也可以是多條。(4)迭代部分:通常屬于循環(huán)體的一部分,用來改變循環(huán)控制變量的值,從而改變循環(huán)條件表達(dá)式的布爾值。2.3.2 2.3.2 循環(huán)語句循環(huán)語句1while語句語句while語句的語法格式是:while() 其中:是循環(huán)繼續(xù)下去的條件,循環(huán)體中的可以是任意合法的Java語句。while語句的語義是:語句的語義是:(1)第第1步步:計(jì)算的值,若值是false,則整個(gè)while語句執(zhí)行結(jié)束,程序?qū)⒗^續(xù)執(zhí)行緊跟在該while循環(huán)體之后的語句,而循

29、環(huán)體內(nèi)的語句一次都沒有得到執(zhí)行。若值是true,則轉(zhuǎn)第2步。(2)第第2步步:依次執(zhí)行循環(huán)體中的、,再轉(zhuǎn)第1步。2.3.2 2.3.2 循環(huán)語句循環(huán)語句2do while語句語句dowhile語句的語法格式是:do while();其中:是循環(huán)繼續(xù)下去的條件,循環(huán)體中的、可以是任何合法的Java語句。do while語句的語義是:(1)第第1步步:依次執(zhí)行循環(huán)體中的、。(2)第第2步步:計(jì)算的值,若值是false,則整個(gè)do while語句執(zhí)行結(jié)束,程序繼續(xù)執(zhí)行緊跟在該do while語句之后的語句。若值是true,轉(zhuǎn)第1步。2.3.2 2.3.2 循環(huán)語句循環(huán)語句【例2.6】設(shè)計(jì)一個(gè)Java

30、程序,打印出1*2*3*n之積,變量n的初始值在程序中指定。MultiplyCalculate.javapublic class MultiplyCalculate public static void main(Stringargs)long s =1;int k = Integer.parseInt(args0);/ 把字符串轉(zhuǎn)換為整型for (int i = 1;i k;i+)s = s * i ;System.out.println(1 * 2 * 3+* +k+ = + s);/ 打印相乘的結(jié)果用之前介紹的操作方法(見前圖2.1)打開“Run Configurations”窗口,配置

31、程序運(yùn)行時(shí)的輸入?yún)?shù),在“Arguments”標(biāo)簽頁的“Program arguments”欄輸入“10”,然后單擊“Run”按鈕運(yùn)行程序,結(jié)果為:1 * 2 * 3.* 10 = 3628802.3.2 2.3.2 循環(huán)語句循環(huán)語句3for語句語句for語句與while語句一樣,也是先判斷循環(huán)條件,再執(zhí)行循環(huán)體。它的語法格式是:for (e1; e2; e3) 其中:e1是用逗號分隔的Java中任意表達(dá)式的列表,可默認(rèn)不寫,但其后的分號不能省略;e2是布爾表達(dá)式,表示循環(huán)繼續(xù)執(zhí)行的條件,若該部分默認(rèn),則表示條件永遠(yuǎn)為真,成為死循環(huán),e2后的分號同樣不能省略;e3也是用逗號分隔的Java中任意

32、表達(dá)式的列表,同樣可以缺省不寫。2.3.2 2.3.2 循環(huán)語句循環(huán)語句for語句的語義是:語句的語義是:(1)第)第1步步:首先從左到右依次執(zhí)行e1中用逗號分隔的各個(gè)表達(dá)式,這些表達(dá)式僅在此執(zhí)行一次,以后不再執(zhí)行,通常用于變量初始化賦值。(2)第)第2步:步:計(jì)算布爾表達(dá)式e2的值。若值為false,則整個(gè)for循環(huán)語句執(zhí)行結(jié)束,程序繼續(xù)執(zhí)行緊跟在該for語句之后的語句;若值為true,則依次執(zhí)行循環(huán)體中的、。(3)第)第3步:步:從左到右依次執(zhí)行e3中用逗號分隔的各個(gè)表達(dá)式,再轉(zhuǎn)第2步。2.3.2 2.3.2 循環(huán)語句循環(huán)語句【例2.7】設(shè)計(jì)一個(gè)Java程序,輸出所有的水仙花數(shù)。所謂水仙花

33、數(shù),是指一個(gè)3位數(shù),其各位數(shù)字的立方和等于該數(shù)自身,例如,153 = 13+53+33。TestNum.javapublic class TestNum public static void main(String args)int i = 0;/ 百位數(shù)int j = 0;/ 十位數(shù)int k = 0;/ 個(gè)位數(shù)int n = 0;int p = 0;for( int m = 100; m 1000; m+)i = m /100;/ 得到百位數(shù)n = m %100;j = n /10;/ 得到十位數(shù)k = n %10;/ 得到個(gè)位數(shù)p = i*i*i+j*j*j+k*k*k;if (p=m)

34、System.out.println(m);/ 打印水仙花數(shù)2.3.2 2.3.2 循環(huán)語句循環(huán)語句程序運(yùn)行結(jié)果:1533703714072.3.3 2.3.3 流程跳轉(zhuǎn)語句流程跳轉(zhuǎn)語句(1)break語句語句:從switch語句、循環(huán)語句或標(biāo)號標(biāo)識的代碼塊中退出。例如,以下while循環(huán)語句用于計(jì)算從1加到100的值,至101時(shí)自動(dòng)退出:int a = 1,result = 0;while (true) result += a+;if (a = 101) break;System.out.println(result);(2)continue語句語句:跳過本次循環(huán),立即開始新的一輪循環(huán)。2.

35、3.3 2.3.3 流程跳轉(zhuǎn)語句流程跳轉(zhuǎn)語句【例2.8】打印100200之間能被3整除的數(shù),每10個(gè)數(shù)一行。TestContinue.javapublic class TestContinue public static void main(String args) int n = 0;int i = 0;for (n = 100; n = 200; n+) if (n % 3 != 0)continue;/ 不能被3整除,結(jié)束本次循環(huán)i+;System.out.print(n + );if (i % 10 = 0) / 每10個(gè)數(shù)一行System.out.println();程序運(yùn)行結(jié)果:1

36、02 105 108 111 114 117 120 123 126 129 132 135 138 141 144 147 150 153 156 159 162 165 168 171 174 177 180 183 186 189 192 195 198 (3)return語句語句:退出本方法,跳到上層調(diào)用方法。2.4 2.4 數(shù)組數(shù)組2.4.1 一維數(shù)組一維數(shù)組1一維數(shù)組的定義一維數(shù)組的定義一維數(shù)組的定義格式有如下兩種:格式1: ;格式2: ;其中:可以是Java中任意的數(shù)據(jù)類型,為用戶自定義的一個(gè)合法的變量名, 指明該變量是一個(gè)數(shù)組類型變量。Java在定義數(shù)組時(shí)并不為數(shù)組元素分配內(nèi)存

37、,僅為分配一個(gè)引用變量的空間。例如下面的語句:int a ; String person;int b100;/ 錯(cuò)誤,定義數(shù)組時(shí)不能指定其長度2.4.1 2.4.1 一維數(shù)組一維數(shù)組2創(chuàng)建一維數(shù)組對象創(chuàng)建一維數(shù)組對象在Java語言中,使用new關(guān)鍵字創(chuàng)建一維數(shù)組對象,格式為:數(shù)組名 = new 元素類型 元素個(gè)數(shù);例如下面的語句:int Array = new int100;/ 創(chuàng)建一個(gè)int型數(shù)組,存放100個(gè)int類型的數(shù)據(jù)Java虛擬機(jī)首先在堆區(qū)中為數(shù)組分配內(nèi)存空間,如圖2.2所示,創(chuàng)建了一個(gè)包含100個(gè)元素的int型數(shù)組,數(shù)組成員都是int類型(4個(gè)字節(jié)),因此整個(gè)數(shù)組對象在堆區(qū)中占4

38、00個(gè)字節(jié)。2.4.1 2.4.1 一維數(shù)組一維數(shù)組3一維數(shù)組初始化一維數(shù)組初始化一維數(shù)組的初始化有如下兩種方式。(1)靜態(tài)初始化靜態(tài)初始化:指的是在定義數(shù)組的同時(shí)就為數(shù)組元素分配空間并賦值,它的格式如下: = ,;或者 = ,;Java編譯程序會自動(dòng)根據(jù)個(gè)數(shù)算出整個(gè)數(shù)組的長度并分配相應(yīng)的空間,例如下面的語句:int Array = 1,2,3,4;數(shù)組成員是引用類型的也可靜態(tài)初始化,代碼如下:Point Pa = new Point(1,4), new Point(3,9), new Point(15,18);class Point int x, y;Point(int a, int b)

39、x = a;y = b;2.4.1 2.4.1 一維數(shù)組一維數(shù)組初始化后的內(nèi)存布局,如圖2.3所示。2.4.1 2.4.1 一維數(shù)組一維數(shù)組(2)動(dòng)態(tài)初始化動(dòng)態(tài)初始化:指的是數(shù)組定義、分配空間與賦值的操作分開進(jìn)行,例如下面的語句:int a = new int3;a0 = 1; a1 = 5; a2 = 9;同樣,數(shù)組成員是引用類型的也可動(dòng)態(tài)初始化,例如下面的代碼:Point Pa = new Point3;Pa0 = new Point(1,4);Pa1 = new Point(3,9);Pa2 = new Point(15,18);2.4.1 2.4.1 一維數(shù)組一維數(shù)組【例2.9】輸入一

40、組非0整數(shù)到一維數(shù)組中,設(shè)計(jì)一個(gè)Java程序,求出這一組數(shù)的平均值,并分別統(tǒng)計(jì)出這一組數(shù)中正數(shù)和負(fù)數(shù)的個(gè)數(shù)。TestAverage.javapublic class TestAverage public static void main(String args)int i = args.length;/ 獲取命令行參數(shù)的長度int arr = new int10;int num =0;int k =0; int p =0;for(int j =0;ji;j+)arrj= Integer.parseInt(argsj);if (arrj 0)k+;/ 負(fù)數(shù)的個(gè)數(shù)加一elsep+;/ 正數(shù)的個(gè)數(shù)加

41、一num = num + arrj;/ 計(jì)算累加和System.out.println(正數(shù)的個(gè)數(shù)+p);System.out.println(負(fù)數(shù)的個(gè)數(shù)+k);System.out.println(平均值是+num/i);/ 計(jì)算平均值2.4.1 2.4.1 一維數(shù)組一維數(shù)組用之前介紹的操作方法(見前圖2.1)打開“Run Configurations”窗口,配置程序運(yùn)行時(shí)的輸入?yún)?shù),在“Arguments”標(biāo)簽頁的“Program arguments”欄輸入“3 8 4 -5 6 7 8 -4 11 12”,然后單擊“Run”按鈕運(yùn)行程序,結(jié)果為:正數(shù)的個(gè)數(shù)8負(fù)數(shù)的個(gè)數(shù)2平均值是52.4.

42、2 2.4.2 多維數(shù)組多維數(shù)組1二維數(shù)組的定義二維數(shù)組的定義二維數(shù)組的定義格式如下:格式1: ;格式2: ;與一維數(shù)組的情形類似,定義二維數(shù)組時(shí)不需要給出數(shù)組大小。int a ; String names;int b100100;/ 錯(cuò)誤,定義數(shù)組時(shí)不能指定其長度2.4.2 2.4.2 多維數(shù)組多維數(shù)組2創(chuàng)建二維數(shù)組對象創(chuàng)建二維數(shù)組對象與創(chuàng)建一維數(shù)組對象一樣,創(chuàng)建二維數(shù)組對象同樣使用new關(guān)鍵字,格式如下:數(shù)組名 = new 數(shù)組元素類型 數(shù)組元素個(gè)數(shù) 數(shù)組元素個(gè)數(shù);例如下面的語句:int a = new int23;/ 創(chuàng)建一個(gè)int型的二維數(shù)組和一維數(shù)組一樣,若沒有對二維數(shù)組成員進(jìn)行顯式

43、初始化,則會進(jìn)行隱式初始化,會根據(jù)創(chuàng)建的數(shù)組類型初始化對象,內(nèi)存布局如圖2.4所示。2.4.2 2.4.2 多維數(shù)組多維數(shù)組3二維數(shù)組初始化二維數(shù)組初始化和一維數(shù)組一樣,二維數(shù)組的初始化也分靜態(tài)初始化和動(dòng)態(tài)初始化兩種。(1)靜態(tài)初始化靜態(tài)初始化在下面的語句中,定義String類型數(shù)組alphabet的同時(shí)就初始化其成員,即靜態(tài)初始化,如下:String alphabet = a,b,c, d,e,f, g,h,i, j,k,l;二維數(shù)組的第二維長度可以各不相同,例如下面的語句:String alphabet = a,b,c,d, e,f, g,h, i,j,k;2.4.2 2.4.2 多維數(shù)組

44、多維數(shù)組和一維數(shù)組一樣,二維數(shù)組成員是引用類型的,也可靜態(tài)初始化。下面的代碼片段創(chuàng)建的引用類型二維數(shù)組的內(nèi)存布局,如圖2.5所示。Point pt = new Point(1, 2), new Point(3, 4), new Point(5, 6), new Point(7, 8), new Point(9, 10), new Point(11, 12);class Point int x, y; Point(int a, int b) x = a; y = b; 2.4.2 2.4.2 多維數(shù)組多維數(shù)組(2)動(dòng)態(tài)初始化動(dòng)態(tài)初始化二維數(shù)組的動(dòng)態(tài)初始化有兩種方式。方式方式1: = new ;例如:int arr = new int35;方式方式2:從高維向低維依次進(jìn)行空間分配,此時(shí)分配的數(shù)組空間可以是任意形狀,步驟如下。 由于二維數(shù)組首先是個(gè)一維數(shù)組,故先對該一維數(shù)組進(jìn)行空間分配,亦即先對最高維進(jìn)行空間分配,格式為: = new ;例如:int c = new int3 ; 每個(gè)元素又是一個(gè)一維數(shù)組,故再對每個(gè)元素用new語句進(jìn)行空間分配,格式與一維數(shù)組相同。例如下面的語句:c0 = new int4;c1 = new int3;c2 = new int5;

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論