




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
3制程序流在Java里我們利用運(yùn)算符對(duì)象和數(shù)據(jù)并用執(zhí)行控制語(yǔ)句作出選擇。Java是建立在C++基礎(chǔ)上的,所以對(duì)C和C++程序員來(lái)說(shuō),對(duì)Java這方面的大多數(shù)語(yǔ)句和運(yùn)算符都應(yīng)是非常熟悉的。當(dāng)然,Java使用Java運(yùn)算(+(*(SideEffect(Primitives外,String”和“+=”。JavaA=X+Y-2/2+A=X+(Y-2)/(2+賦(A=4;但不可將任何東西賦給一個(gè)常數(shù)(4=A指向一個(gè)對(duì)象的句柄所以在為其賦值的時(shí)候可將來(lái)自一個(gè)地方的內(nèi)容到另一個(gè)地方例如假設(shè)為主類型使“A=B那么B處的內(nèi)容就到A接著又修改了A,那么B為自己的。就是將句柄從一個(gè)地方到另一個(gè)地方。這意味著假若為對(duì)象使用“C=D”,那么CDD(這里有一些題外話。在后面,大家在代碼示例里看到的第一個(gè)語(yǔ)句將是“package03”使用的“package”3作用是為那一章剩余的代碼建立章節(jié)編號(hào)。在第17章,大家會(huì)看到第3章的所有代碼除那些有不同封裝名稱的以外)都會(huì)自動(dòng)置入一個(gè)名為c03的子目錄里;第4章的代碼置入c04;以此類推。所有這些都是通過(guò)第17章展示的CodePackage.java程序?qū)崿F(xiàn)的封裝的基本概念會(huì)在第5章進(jìn)行詳盡的解釋。就目前來(lái)說(shuō),大家只需記住象“package03”這樣的形式只是用于為某一章的代碼建立相應(yīng)的子。(為運(yùn)行程序,必須保證在classpath里包含了我們安裝本書源碼文件的根目錄(那個(gè)里包含了c02,c03c,c04等等子。對(duì)于Java后續(xù)的版本(1.1.4和更高版本如果您的main()用package語(yǔ)java//://AssignmentwithobjectsisabitclassNumber{inti;}publicclassAssignmentpublicstaticvoidmain(String[]args){Numbern1=newNumber();Numbern2=newNumber();n1.i=9;n2.i=System.out.println("1:n1.i:"+n1.i+",n2.i:"+n2.i);n1=System.out.println("2:n1.i:"+n1.i+",n2.i:"+n2.i);n1.i=System.out.println("3:n1.i:"+n1.i",n2.i:"+}}97-98Number類非常簡(jiǎn)單,它的兩個(gè)實(shí)例(n1和n2)是在main()里創(chuàng)建的。每個(gè)Number中的i值都賦予了一個(gè)不同的值。隨后,將n2賦給n1,而且n1發(fā)生改變。在許多程序設(shè)計(jì)語(yǔ)言中,我們都希望n1和n2任何時(shí)候都相互獨(dú)立。但由于1:n1.i:9,n2.i:2:n1.i:47,n2.i:3:n1.i:27,n2.i:看來(lái)改變n1的同時(shí)也改變了n2!這是由于無(wú)論n1還是n2都包含了相同的句柄,它指向相同的對(duì)象(最初的句柄位于n1內(nèi)部,指向容納了值9的一個(gè)對(duì)這種特殊的現(xiàn)象通常也叫作“別名Java操作對(duì)象的一種基本方式。但n1.i=n1n2很快就會(huì)這樣做會(huì)使對(duì)象內(nèi)部的字段處理發(fā)生并與標(biāo)準(zhǔn)的面向?qū)?2的效果。1.法調(diào)用中的別名處//://Passingobjectstomethodsmaynotbe//you'reusedclassLetter{charc;}publicclassPassObject{staticvoidf(Lettery){y.c=}publicstaticvoidmain(String[]args){Letterx=newLetter();x.c=System.out.println("1:x.c:"+x.c);System.out.println("2:x.c:"+}}99y.c=實(shí)際改變的是f()之外的對(duì)象。輸出結(jié)果如下:1:x.c:a2:x.c:別名和它的對(duì)策是非常復(fù)雜的一個(gè)問(wèn)題。盡管必須等至第12可獲得所算術(shù)運(yùn)算Java(+(/整數(shù)除直接砍掉小數(shù),而不是進(jìn)位。Java4x,并將結(jié)果賦給x,可用:x+=4。//://Demonstratesthemathematicaloperators.importjava.util.*;publicclassMathOps//Createashorthandtosavety:staticvoidprt(Strings){}//shorthandtoprintastringandanstaticvoidpInt(Strings,inti){prt(s+"="+i);}//shorthandtoprintastringandastaticvoidpFlt(Strings,floatf){ prt(s+"="+f); publicstaticvoidmain(String[]args){//Createarandomnumber//seedswithcurrenttimebydefault:Randomrand=newRandom();inti,j, //'%'limitsumvaluetoj=rand.nextInt()%k=rand.nextInt()%100;i=j+k;pInt("j+k",i);i=j-k;pInt("j-k",i);i=k/j;pInt("k/j",i);i=k*j;pInt("k*j",i);i=k%j;pInt("k%j",i);j%=k;pInt("j%=k",j); //Floating-pointnumbertests:floatu,v,w; //appliestodoubles,toov=rand.nextFloat();w=pFlt("v",v);pFlt("w",w);u=v+w;pFlt("v+w",u=v-w;pFlt("v-w",u=v*w;pFlt("v*w",u=v/w;pFlt("v/w",//thefollowingalsoworks //char,byte,short,//andu+=v;pFlt("u+=v",u-=v;pFlt("u-=v",u*=v;pFlt("u*=v",u/=v;pFlt("u/=v",}}100-101打印一個(gè)String;pInt()先打印一個(gè)String,再打印一個(gè)int;而pFlt()先打印一個(gè)String再打印一個(gè)float當(dāng)然它們最終都要用System.out.println()RandomnextIntnextLong()nextFloat()或者1(99)之下。1.元加、減運(yùn)算x=-x=a*-x=a*(-自動(dòng)遞增和遞C,Java符是“++”Aint(整數(shù))值,則表達(dá)式++A(A=A+1。遞增和遞減運(yùn)算符結(jié)果生成的是變量A和后遞減(A++A--,會(huì)先生成值,再執(zhí)行運(yùn)算。下面是一個(gè)例子:102-103//://Demonstratesthe++and--publicclassAutoIncpublicstaticvoidmain(String[]args){inti=1;prt("i:"+prt("++i:"+++i);//Pre-incrementprt("i++:"+i++);//Post-incrementprt("i:"+i);prt("--i:"+--i);//Pre-prt("i--:"+i--);//Post-decrementprt("i:"+i);}staticvoidprt(Strings){}}i1:2:2i3--:2i-:2i1103遞增運(yùn)算符正是對(duì)“C++”這個(gè)名字的一種解釋,暗示著“超載C的一步在早期的一次Java中,BillJoy(始創(chuàng)人之一)聲稱“Java=C++--”(C加加減減意味著Java已去除了C++一些沒(méi)來(lái)由折磨人的地方,形成一種更精簡(jiǎn)的語(yǔ)言正如大家會(huì)在這本書中學(xué)到的那樣,Java的許多地方都得到了簡(jiǎn)化所以JavaC++更容易。關(guān)系運(yùn)算(Booleantru(真。關(guān)系運(yùn)算符包括小于(<、大于(>、小于或等于(<=(>=(==(!boolean1.Java104//:publicclassEquivalencepublicstaticvoidmain(String[]args){Integern1=newInteger(47);Integern2=newSystem.out.println(n1==n2);System.out.println(n1!=}}System.out.println(n1==n2)可打印出內(nèi)部的布爾比較結(jié)果。一般人都會(huì)認(rèn)為輸出結(jié)果肯定先是true,再是false,因?yàn)閮蓚€(gè)Integer對(duì)就是對(duì)象句柄。所以輸出結(jié)果實(shí)際上先是false,再是true。這自然會(huì)使第一次equals()型直接使用==和!=即可。下面舉例說(shuō)明如何使用:104//:publicclassEqualsMethodpublicstaticvoidmain(String[]args){Integern1=newInteger(47);Integern2=newInteger(47);}}104-105//:classValue{inti;}publicclassEqualsMethod2publicstaticvoidmain(String[]args){Valuev1=newValue();Valuev2=newValue();v1.i=v2.i=100;}}此時(shí)的結(jié)果又變回了false!這是由于equals()的默認(rèn)行為是比較句柄。所equals(),否則不可能表現(xiàn)出我們希望的行為。不幸的是,要到第7會(huì)學(xué)習(xí)如何改變行為。但要注意equals()的這種行為方式同時(shí)或許能夠避免一些“”性的。大多數(shù)Java類庫(kù)都實(shí)現(xiàn)了equals(),所以它實(shí)際比較的是對(duì)象的內(nèi)容,而邏輯運(yùn)算邏輯運(yùn)算符AND(&&、OR(||)以及NOT(!)能生成一個(gè)布爾值(true或105-106importjava.util.*;publicclassBoolpublicstaticvoidmain(String[]args){Randomrand=newRandom();inti=rand.nextInt()%100;intj=rand.nextInt()%100;prt("i="+i);prt("j="+prt("i>jis"+(i>prt("i<jis"+(i<prt("i>=jis"+(i>=prt("i<=jis"+(i<=prt("i==jis"+(i==prt("i!=jis"+(i!=//Treatinganintasaboolean//notlegal//!prt("i&&jis"+(i&&//!prt("i||jis"+(i||//!prt("!iis"+prt("(i<10)&&(j<10)is+((i<10)&&(j<10))prt("(i<10)||(j<10)is+((i<10)||(j<10))}staticvoidprt(Strings){}}AND,ORNOTCC++中不同,不可將一個(gè)非106//://Relationalandlogicaloperators.importjava.util.*;publicclassBoolpublicstaticvoidmain(String[]args){Randomrand=newRandom();inti=rand.nextInt()%100;intj=rand.nextInt()%100;prt("i="+i);prt("j="+prt("i>jis"+(i>prt("i<jis"+(i<prt("i>=jis"+(i>=prt("i<=jis"+(i<=prt("i==jis"+(i==prt("i!=jis"+(i!=//Treatinganintasaboolean//notlegal//!prt("i&&jis"+(i&&//!prt("i||jis"+(i||//!prt("!iis"+prt("(i<10)&&(j<10)is+((i<10)&&(j<10))prt("(i<10)||(j<10)is+((i<10)||(j<10))}staticvoidprt(Strings){}}i=j=i>jistruei<jisfalsei>=jisi<=jisi==jisfalsei!=jistrue(i<10)&&(j<10)isfalse(i<10)||(j<10)istrueString在上述程序中,可將對(duì)int的定義替換成除boolean以外的其他任何主數(shù)據(jù)只比零大一點(diǎn)點(diǎn)(2,它仍然屬于“非零”值。1.107//://Demonstratesshort-circuiting//withlogicaloperators.publicclassShortCircuitstaticbooleantest1(intval){System.out.println("test1("+val+")");System.out.println("result:"+(val<1));returnval<1;}staticbooleantest2(intval){System.out.println("test2("+val+")");System.out.println("result:"+(val<2));returnval<2; staticbooleantest3(intval){System.out.println("test3("+val+")");System.out.println("result:"+(val<3));returnval<3;}publicstaticvoidmain(String[]args){if(test1(0)&&test2(2)&&test3(2))System.out.println("expressionistrue");System.out.println("expressionis}}if(test1(0))&&test2(2)&&108result:trueresult:falseexpressionistrue個(gè)測(cè)試產(chǎn)生了一個(gè)false結(jié)果。由于這意味著整個(gè)表達(dá)式肯定為false,所以為按位運(yùn)算按位運(yùn)算符允許我們操作一個(gè)整數(shù)主數(shù)據(jù)類型中的單個(gè)“比特按位運(yùn)算來(lái)源于C語(yǔ)言的低級(jí)操作我們經(jīng)常都要直接硬件需要頻繁設(shè)置硬件寄存器內(nèi)的二進(jìn)制位。Java的設(shè)計(jì)初衷是嵌入電視頂置盒內(nèi),所以這種低1AND(&101,OR(|)1;00。若兩個(gè)輸入11XO(^1NO(~,NOT0,1;1,0boolean(布爾)類型當(dāng)作一種“單位”或“單比特”值對(duì)待,所以AND,ORXOR,為我們新增了一個(gè)XOR邏輯運(yùn)算符,它并未包括在“邏輯”運(yùn)算符的列表中。在移位表達(dá)式中,我們被使用布爾運(yùn)算,原因?qū)⒃谙旅娼忉?。移位運(yùn)算(主類型的一種。左移位運(yùn)算符(<<)(0(>>“符號(hào)擴(kuò)展若值為正則在插入0若值為負(fù)則在插入1Java(>>>在插入0。這一運(yùn)算符是C或C++沒(méi)有的。char,byteshortint5int6longbyteshort運(yùn)算,得到的可能不是正確的結(jié)果(Java1.0Java1.1。它們會(huì)int下會(huì)得到-1109-110//://TestofunsignedrightpublicclassURShiftpublicstaticvoidmain(String[]args){inti=-1;i>>>=longl=-1;l>>>=shorts=-1;s>>>=byteb=-1;b>>>=}}110-112//://Usingthebitwiseoperators.importjava.util.*;publicclassBitManipulationpublicstaticvoidmain(String[]args){Randomrand=newRandom();inti=rand.nextInt();intj=rand.nextInt();pBinInt("-1",-1);pBinInt("+1",intmaxpos= pBinInt("maxpos",maxpos);intmaxneg=- pBinInt("maxneg",maxneg);pBinInt("i",i);pBinInt("~i",pBinInt("-i",-pBinInt("j",pBinInt("i&j",i&pBinInt("i|j",i|pBinInt("i^j",i^j);pBinInt("i<<5",i<<pBinInt("i>>5",i>>pBinInt("(~i)>>5",(~i)>>pBinInt("i>>>5",i>>>pBinInt("(~i)>>>5",(~i)>>>longl=rand.nextLong();longm=rand.nextLong();pBinLong("-1L",-1L);pBinLong("+1L",+1L);longll pBinLong("maxpos",longlln= pBinLong("maxneg",lln);pBinLong("l",l);pBinLong("~l",pBinLong("-l",-pBinLong("m",m);pBinLong("l&m",l&m);pBinLong("l|m",l|m);pBinLong("l^m",l^m);pBinLong("l<<5",l<<pBinLong("l>>5",l>>pBinLong("(~l)>>5",(~l)>>pBinLong("l>>>5",l>>>pBinLong("(~l)>>>5",(~l)>>>}staticvoidpBinInt(Strings,inti){s+",int:"+i+",binary:"); for(intj=31;j>=0;j--)if(((1<<j)&i)!=0)}staticvoidpBinLong(Strings,longl){s+",long:"+l+",binary:"); for(inti=63;i>=0;i--)if(((1L<<i)&l)!=0)}}pBinInt()pBinLong()long時(shí)忽略它們具體的實(shí)現(xiàn)方案。大家要注意的是System.out.print()System.out.println()。除展示所有按位運(yùn)算符針對(duì)int和long的效果之外,本例也展示了int和long的最小值、最大值、+1和-1值,使大家能體會(huì)它們的情況。注意代表正負(fù)號(hào):0,1int112-113-1,int:-1,+1,int:1,
maxpos, , maxneg,int:- ,binary:i, , ~i,int:- ,binary:-i,int:- ,binary:j, , i&j,int: ,binary: i|j,int: ,binary: i^j, , i<<5, , i>>5,int: ,binary: (~i)>>5,int:- ,binary:i>>>5,int: ,binary: (~i)>>>5,int: ,binary: 數(shù)字的二進(jìn)制形式表現(xiàn)為“有符號(hào)2的補(bǔ)值三元if-else運(yùn)算if-else0:若“布爾表達(dá)式”的結(jié)果為true,就計(jì)算“值0”,而且它的結(jié)果成為最終由運(yùn)算符產(chǎn)生的值。但若“布爾表達(dá)式”的結(jié)果為false,計(jì)算的就是“值1”,而if-else(在后面介紹,但三元運(yùn)算符更加簡(jiǎn)潔。盡管C引以為傲的就是它是一種簡(jiǎn)練的語(yǔ)言,而且三元運(yùn)算符的引入多半if-elsestaticintternary(inti){returni<10?i*100:i*10;}可以看出,假設(shè)用普通的if-else結(jié)構(gòu)寫上述代碼,代碼量會(huì)比上面多出許staticintalternative(inti){if(i<10)returni*100;returni*}但第二種形式更易理解而且不要求的錄入所以在挑選三元運(yùn)算符時(shí),逗號(hào)運(yùn)算在C和C++里,逗號(hào)不僅作為函數(shù)自變量列表的分隔符使用,也作為進(jìn)行后續(xù)計(jì)算的一個(gè)運(yùn)算符使用。在Java里需要用到逗號(hào)的唯一場(chǎng)所就是for循環(huán),字串運(yùn)算符這個(gè)運(yùn)算符在Java里有一項(xiàng)特殊用途:連接不同的字串。這一點(diǎn)已然的在C++里這能看起來(lái)非常不錯(cuò)所以引入了一“運(yùn)算符過(guò)載機(jī)C++C++C++JavaJavaC++程序員那樣設(shè)計(jì)自己的過(guò)載運(yùn)算符。我們注意到運(yùn)用“String+”時(shí)一些有趣的現(xiàn)象。若表達(dá)式以一個(gè)String起intx=0,y=1,z=2;StringsString="x,y,z";System.out.println(sString+x+y+在這里,Java編譯程序會(huì)將x,y和z轉(zhuǎn)換成它們的字串形式,而不是先把System.out.println(x+運(yùn)算符常規(guī)操作規(guī)計(jì)算有絲毫不確定的因素,都容易括號(hào)的用法。這個(gè)問(wèn)題在Java里仍然存在CC++while(x=y)}程序的意圖是測(cè)試是相等(==而不是進(jìn)行賦值操作C和C++中,限循環(huán)。在Java里,這個(gè)表達(dá)式的結(jié)果并不是布爾值,而編譯望的是一個(gè)布爾值,而且不會(huì)從一個(gè)int數(shù)值中轉(zhuǎn)換得來(lái)。所以在編譯時(shí),系統(tǒng)就會(huì)提示出現(xiàn)錯(cuò)誤,有效地我們進(jìn)一步運(yùn)行程序。所以這個(gè)缺點(diǎn)在Java里不會(huì)造成更嚴(yán)重的。唯一不會(huì)得到編譯錯(cuò)誤的時(shí)候是x和y都為布爾值。在這種情況下,x=yCC++ADOR,ANDORANDOR(&或|ANDOR(&&或||Java造型運(yùn)算(Castintfloat。通過(guò)造型,我們可明確設(shè)置這種類型的轉(zhuǎn)換,voidcasts(){inti=200;longl=(long)i;longl2=(long)200;}候會(huì)自動(dòng)進(jìn)行int值到long值的轉(zhuǎn)換。當(dāng)然,仍然可以設(shè)置一個(gè)造型,提醒自在C和C++中,造型有時(shí)會(huì)讓人頭痛。在Java里,造型則是一種比較安全的(Narrowing就是說(shuō),是能容納 ,時(shí)就可能信息丟失的 “這可能是一件的事情——如果您想讓我不顧一切地做,那么對(duì)不起,請(qǐng)明(Wideningconversion,Java允許任何主類型“造型”為其他任何一種主類型,但布爾書后面會(huì)講到將對(duì)象造型到一個(gè)類“里例如“橡樹(shù)可造型“樹(shù);(Lil116-117//: class lscharc=0xffff;//maxcharhexvaluebyteb=0x7f;//maxbytehexvalueshorts=0x7fff;//maxshorthexvalueinti1=0x2f;//Hexadecimal(lowercase)inti2=0X2F;//Hexadecimal(uppercase)inti3=0177;//Octal(leadingzero)//HexandOctalsoworkwithlong.longn1=200L;//longsuffixlongn2=200l;//longsuffixlongn3=200;//!longl6(200);//notallowedfloatf1=1;floatf2=1F;//floatsuffixfloatf3=1f;//floatfloatf4=1e-45f;//10tothepowerfloatf5=1e+9f;//floatsuffixdoubled1=1d;//doublesuffixdoubled2=1D;//doublesuffixdoubled3=47e47d;//10tothepower}十六進(jìn)制(Base16)0x0X0-9a-f。若試圖將一個(gè)byteshortint,八進(jìn)制(Base8)00-7C,C++Java寫或小寫的F,float;Ddouble。“e”Math.E。它在象“1.39×e47意味著“1.39×2.71847FORTRAN然地覺(jué)得e“10FORTRAN向的是科學(xué)與工程設(shè)計(jì)領(lǐng)域。理所當(dāng)然,它的設(shè)計(jì)者應(yīng)對(duì)這樣的概念持謹(jǐn)慎eJava考它;它真正的含義是“1.39×1047①:JohnKirkham1962IBM1620FORTRANII6070FORTRAN也肯定是大寫的所以不會(huì)與自然對(duì)數(shù)的基‘e’發(fā)生后者必然是小寫的。10。當(dāng)時(shí),八進(jìn)制也在程序員中廣泛使用盡管未看到它的使用但假若我在乘冪表達(dá)式中看到一個(gè)八進(jìn)制數(shù)字,Base8‘e’70我當(dāng)時(shí)也覺(jué)得它極易產(chǎn)生。所以說(shuō),這個(gè)問(wèn)題完全是自己‘潛入’FORTRANlongn3=200Lfloatf4=1e-47f;//10的fdoublefloat大家會(huì)發(fā)現(xiàn)假若對(duì)主數(shù)據(jù)類型執(zhí)行任何算術(shù)或按位運(yùn)算,只要它們“比int(shortintintfloatdoubledouble;intlong值相加,則結(jié)果為long。Java沒(méi)有在C和C++中,sizeof()運(yùn)算符能滿足我們的一項(xiàng)特殊需要:獲知為數(shù)據(jù)項(xiàng)CC++中,size()程序員必須對(duì)那些類型有多大做到心中有數(shù)。例如,一臺(tái)計(jì)算機(jī)可用32位來(lái)保16CC++程序員頗為頭痛的一個(gè)問(wèn)題。Java不需要sizeof()運(yùn)算符來(lái)滿足這方面的需要,因?yàn)樗袛?shù)據(jù)類型在所有機(jī)器的大小都是相同的。我們不必考慮移植問(wèn)題——Java復(fù)習(xí)計(jì)算順推薦用一句話來(lái)幫助“UlcerAddictsReallyLikeCAlot”,即“潰瘍Ulcer(潰瘍)Unary:Addicts(患者)Arithmetic(shift);算術(shù)(和移位)*Really(特別)Relational:關(guān)系><>=<===!=Like(喜歡)Logical(bitwise):邏輯(和按位)&&||&|^CConditional(ternary):條件(三元)A>B?X:YALotAssignment:賦值=(以及復(fù)合賦值,如運(yùn)算符總120-129//://Testsalltheoperatorsonall//primitivedatatypestoshow//onesareacceptedbytheJavaclassAllOps//Toaccepttheresultsofabooleantest:voidf(booleanb){}voidboolTest(booleanx,booleany)//Arithmetic//!x=x*//!x=x///!x=x%//!x=x+//!x=x-//!//!x--//!x=//!x=-//Relationaland//!f(x>//!f(x>=//!f(x<//!f(x<=f(x==f(x!=x=x&&y;x=x||//Bitwise//!x=~y;x=x&y;x=x|y;x=x^y;//!x=x<<//!x=x>>//!x=x>>>//Compound//!x+=//!x-=//!x*=//!x/=//!x%=//!x<<=//!x>>=//!x>>>=x&=y;x^=y;x|=////!charc=//!byteB=//!shorts=//!inti=//!longl=//!floatf=//!doubled=}voidcharTest(charx,chary)//Arithmeticoperators:x=(char)(x*y);x=(char)(x/x=(char)(x%x=(char)(x+x=(char)(x-y);x--x=(char)+y;x=(char)-//Relationalandlogical:f(x>y);f(x>=f(x<f(x<=f(x==f(x!=//!//!f(x&&//!f(x||//Bitwiseoperators:x=(char)~y;x=(char)(x& =(char)(x|x=(char)(x^x=(char)(x<<x=(char)(x>>x=(char)(x>>>//Compoundassignment:x+=y;x-=x*=y;x/=y;x%=y;x<<=x>>=x>>>=x&=y;x^=y;x|=////!booleanb=(boolean)x;byteB=(byte)x;shorts=(short)x;inti=(int)x;longl=(long)x;floatf=(float)x;doubled=}voidbyteTest(bytex,bytey)//Arithmeticoperators:x=(byte)(x*y);x=(byte)(x/x=(byte)(x%x=(byte)(x+x=(byte)(x-y);x--x=(byte)+y;x=(byte)-//Relationalandlogical:f(x>y);f(x>=f(x<f(x<=f(x==f(x!=//!//!f(x&&//!f(x||//Bitwiseoperators:x=(byte)~y;x=(byte)(x&x=(byte)(x|x=(byte)(x^x=(byte)(x<<x=(byte)(x>>x=(byte)(x>>>//Compoundassignment:x+=y;x-=y;x*=y;x/=y;x%=y;x<<=x>>=x>>>=x&=y;x^=y;x|=////!booleanb=(boolean)x;charc=(char)x;shorts=(short)x;inti=(int)x;longl=(long)x;floatf=(float)x;doubled=}voidshortTest(shortx,shorty)//Arithmeticoperators:x=(short)(x*y);x=(short)(x/x=(short)(x%x=(short)(x+x=(short)(x-y);x--x=(short)+y;x=(short)-//Relationalandlogical:f(x>y);f(x>=f(x<f(x<=f(x==f(x!=//!//!f(x&&//!f(x||//Bitwiseoperators:x=(short)~y;x=(short)(x&x=(short)(x|x=(short)(x^x=(short)(x<<x=(short)(x>>1);x=(short)(x>>>//Compoundassignment:x+=y;x-=y;x*=y;x/=y;x%=y;x<<=x>>=x>>>=x&=y;x^=y;x|=////!booleanb=(boolean)x;charc=(char)x;byteB=(byte)x;inti=(int)x;longl=(long)x;floatf=(float)x;doubled=}voidintTest(intx,inty)//Arithmeticoperators:x=x*y;x=x/y;x=x%y;x=x+y;x=x-y;x--x=+y;x=-//Relationalandlogical:f(x>y);f(x>=f(x<f(x<=f(x==f(x!=//!//!f(x&&//!f(x||//Bitwiseoperators:x=~y;x=x&y;x=x|y;x=x^y;x=x<<1;x=x>>x=x>>>//Compoundassignment:x+=y;x-=y;x*=y;x/=y;x%=y;x<<=x>>=x>>>=x&=y;x^=y;x|=////!booleanb=(boolean)x;charc=(char)x;byteB=(byte)x;shorts=(short)x;longl=(long)x;floatf=(float)x;doubled=(double)x;}voidlongTest(longx,longy)//Arithmeticoperators:x=x*y;x=x/y;x=x%y;x=x+y;x=x-y;x--x=+y;x=-//Relationalandlogical:f(x>y);f(x>=f(x<f(x<=f(x==f(x!=//!//!f(x&&//!f(x||//Bitwiseoperators:x=~y;x=x&y;x=x|y;x=x^y;x=x<<1;x=x>>x=x>>>//Compoundassignment:x+=y;x-=y;x*=y;x/=y;x%=y;x<<=x>>=x>>>=x&=y;x^=y;x|=////!booleanb=(boolean)x;charc=(char)x;byteB=(byte)x;shorts=(short)x;inti=(int)x;floatf=(float)x;doubled=}voidfloatTest(floatx,floaty)//Arithmeticx=x*y;x=x/y;x=x%y;x=x+y;x=x-y;x--x=+y;x=-//Relationalandlogical:f(x>y);f(x>=f(x<f(x<=f(x==f(x!=//!//!f(x&&//!f(x||//Bitwise//!x=//!x=x&//!x=x|//!x=x^//!x=x<<//!x=x>>//!x=x>>>//Compoundassignment:x+=y;x-=y;x*=y;x/=y;x%=//!x<<=//!x>>=//!x>>>=//!x&=//!x^=//!x|=////!booleanb=(boolean)x;charc=(char)x;byteB=(byte)x;shorts=(short)x;inti=(int)x;longl=(long)x;doubled=}voiddoubleTest(doublex,doubley)//Arithmeticoperators:x=x*y;x=x/y;x=x%y;x=x+y;x=x-y;x--x=+y;x=-//Relationalandlogical:f(x>y);f(x>=f(x<f(x<=f(x==f(x!=//!//!f(x&&//!f(x||//Bitwise//!x=//!x=x&//!x=x|//!x=x^//!x=x<<//!x=x>>//!x=x>>>//Compoundassignment:x+=y;x-=y;x*=y;x/=y;x%=//!x<<=//!x>>=//!x>>>=//!x&=//!x^=//!x|=////!booleanb=(boolean)x;charc=(char)x;byteB=(byte)x;shorts=(short)x;inti=(int)x;longl=(long)x;floatf=(float)x;}}注意布爾值(boolean)的能力非常有限。我們只能為其賦予true和falseintintintint129//://Surprise!JavaletsyoupublicclassOverflowpublicstaticvoidmain(String[]args){intbig=0x7fffffff;//maxintvalueprt("big="+big);intbigger=big*4;prt("bigger="+}staticvoidprt(Strings){}}big=bigger=-4對(duì)于char,byte或者short,混合賦值并不需要造型。即使它們執(zhí)行操大家可以看到,除boolean以外,任何一種主類型都可通過(guò)造型變?yōu)槠渌鲌?zhí)行控Java使用了CCC++編程,其中大多while、forswitchJavagot(gotoA==BABfalse句。注意Java不允許一個(gè)數(shù)字作為布爾值使用,即使它在C和C++里是允許的(真是非零,而假是零。若想在一次布爾測(cè)試中使用一個(gè)非布爾值——if(a)if-if:if(if(作為if-else的一個(gè)例子下面這個(gè)test()方法可告訴我們猜測(cè)的一個(gè)數(shù)字131staticinttest(inttestval){intresult=0;if(testval>target)result=-1;elseif(testval<result=+1;result=0;//matchreturnresult;}1.return(返回值test()點(diǎn):131-132staticinttest(inttestval){intresult=0;if(testval>target)result=-1;elseif(testval<target)result=+1;result=0;//matchreturnresult;}else,return反while,do-while和for控制著循環(huán),有時(shí)將其劃分為“反復(fù)語(yǔ)句除非用staticinttest2(inttestval){if(testval>target)return-1;if(testval<target)return+1;return0;//match}132//://DemonstratesthewhilepublicclassWhileTestpublicstaticvoidmain(String[]args){doubler=0;while(r<0.99d)r=Math.random();}}}它用到了Math的stati(靜態(tài)方法random()該方法的作用是產(chǎn)生01(0,1)doublewhile0.99次這個(gè)程序,都會(huì)獲得大小不同的數(shù)字列表。do-do-whilewhile(表達(dá)式whiledo-whiledo-whilefalsewhilefalse在實(shí)際應(yīng)用中,whiledo-while在每一次反復(fù)的時(shí)候,進(jìn)行某種形式的“步進(jìn)(Step。for循環(huán)的形式如for(初始表達(dá)式;表達(dá)式;步進(jìn))測(cè)試一下表達(dá)式。若獲得的結(jié)果是false,就會(huì)繼續(xù)執(zhí)行緊跟在for語(yǔ)句后for133//://Demonstrates"for"loopby//alltheASCIIpublicclassListCharacterspublicstaticvoidmain(String[]args){for(charc=0;c<128;c++)if(c!=26)//ANSIClearscreen"value:"+(int)c"character:"+}}cfor部,而非在由起始花括號(hào)標(biāo)記的代碼塊的最開(kāi)頭。c的作用域是由for控制的表以于象CJavaC++中則可在整個(gè)塊的范圍內(nèi)分散變量在真正需要的地方才加以定義這樣便可形成更自然的編碼風(fēng)格,也更易理解。for134for(inti=0,j=1;i<10&&j!=11;i++,j++)/*bodyofforloop其中,for語(yǔ)句內(nèi)的int定義同時(shí)覆蓋了ij。只有for循環(huán)才具備在控1.號(hào)運(yùn)算 publicclassCommaOperator{publicstaticvoidmain(String[]args){for(inti=1,j=i+10;i<5;i++,j=i*2)System.out.println("i="+i+"j="+}}}1243648中斷和繼在任何循環(huán)語(yǔ)句的主體部分,亦可用break和continue控制循環(huán)的流程。其中,breakcontinue下面這個(gè)程序向大家展示了breakcontinueforwhile循環(huán)中的例135//://Demonstratesbreakand publicclassBreakAndContinuepublicstaticvoidmain(String[]args){for(inti=0;i<100;i++){if(i==74)break;//Outofforif(i%9!=0)continue;//Nexti }inti=//An"infiniteloop":while(true){intj=i*if(j==1269)break;//Outofif(i%10!=0)continue;//Topofloop}}}break。只要i不能被9整除,continue語(yǔ)句會(huì)使程序流程返回循環(huán)的最開(kāi)頭執(zhí)行(所以使i。如果能夠整除,則將值顯示出來(lái)。continue完成剩余的內(nèi)容(所以只有在i9。輸出結(jié)果如下:0,0%90無(wú)限循環(huán)的第二種形式是for(;;)編譯器將while(true)與for(;;)看作同1.名昭著gotogotoAgoto個(gè)地方,還有什么辦法能識(shí)別代碼的流程呢?隨著EdsgerDijkstra著名的“Goto,goto事實(shí)上,真正的問(wèn)題并不在于使用goto,而在于goto的。而且在一些少見(jiàn)的情況下,goto是組織控制流程的最佳。盡管goto仍是Java的一個(gè)保留字,但并未在語(yǔ)言中得到正式使用;Java有g(shù)oto。然而,在break和continue這兩個(gè)關(guān)鍵字的身上,我們?nèi)匀荒芸闯鲆恍ゞoto的。它并不屬于一次跳轉(zhuǎn),而是中斷循環(huán)語(yǔ)句的法。之所以把它們納入goto問(wèn)題中一起討論,是由于它們使用了相同的機(jī)制:。“”是后面跟一個(gè)冒號(hào)的標(biāo)識(shí)符,就象下面這樣對(duì)Java來(lái)說(shuō),唯一用到的地方是在循環(huán)語(yǔ)句之前。進(jìn)一步說(shuō),它實(shí)際需要緊靠在循環(huán)語(yǔ)句的前方——在和循環(huán)之間置入任何語(yǔ)句都是不明智的。而在循環(huán)之前設(shè)置的唯一理由是我們希望在其中嵌套另一個(gè)循環(huán)或者一個(gè)breakcontinue使用,它們就會(huì)中斷到存在的地方。如下所示:break;//1continue;//2continuelabel1;breaklabel1;}}1break2continue3,continuelabel1label14,breaklabel1label1不重新進(jìn)入循環(huán)。也就是說(shuō),它實(shí)際是完全中止了兩個(gè)循環(huán)。for138-139//://Java’s"labeledfor"publicclassLabeledForpublicstaticvoidmain(String[]args){inti=0;outer://Can'thavestatementsherefor(;true;){//infiniteloopinner://Can'thavestatementsherefor(;i<10;i++){prt("i="+i);if(i==2){}if(i==3){i++;//Otherwisei//getsincremented.}if(i==7){prt("continueouter");i++;//Otherwisei//getsincremented.continueouter;}if(i==8){prt("breakouter");breakouter;}for(intk=0;k<5;k++){if(k==3){prt("continueinner");continueinner;}}}}//Can'tbreakor//tolabels}staticvoidprt(Strings){}}prt()注意break會(huì)中斷for循環(huán),而且在抵達(dá)for循環(huán)的末尾之前,遞增表達(dá)式不會(huì)執(zhí)行。由于break跳過(guò)了遞增表達(dá)式,所以遞增會(huì)在i==3的情況下直接執(zhí)行。在i==7的情況下,continueouter語(yǔ)句也會(huì)到達(dá)循環(huán)頂部,而且也會(huì)跳過(guò)139i=continueinneri=1continueinneri=2i=3i=continueinneri=5continueinneri=6continueinneri=7continueouteri=8breakbreak(對(duì)于continuereturn下面這個(gè)例子向大家展示了帶的break以及continue語(yǔ)句在while循140//://Java's"labeledwhile"loop.publicclassLabeledWhile{publicstaticvoidmain(String[]args){inti=0; while(true)prt("Outerwhileloop");while(true){prt("i="+if(i==1){}if(i==3)prt("continuecontinue} {}if(i==7)prt("break}} staticvoidprt(
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 房地產(chǎn)行業(yè)的投資分析
- 商品房以租代售租賃合同
- 高層建筑施工框架節(jié)點(diǎn)連接規(guī)定
- 數(shù)字化營(yíng)銷策略實(shí)施作業(yè)指導(dǎo)書
- 歷史文物鑒定保護(hù)知識(shí)題庫(kù)
- 人力資源公司員工保密協(xié)議
- 2025年秦皇島貨運(yùn)資格證模擬考試新題庫(kù)
- 國(guó)際貿(mào)易與實(shí)務(wù)操作指南
- 設(shè)備采購(gòu)與使用說(shuō)明文書示例
- 2025年塔城道路運(yùn)輸從業(yè)資格證考試題和答案
- 幼兒園大班閱讀《你是我最好的朋友》微課件
- 人教版八年級(jí)美術(shù)下冊(cè)全冊(cè)完整課件
- 二孩同校政策申請(qǐng)書
- 裝卸搬運(yùn)作業(yè)的合理化課件
- 病情痊愈證明
- 管理制度執(zhí)行檢查記錄表
- 浙江寧波慈溪市市場(chǎng)監(jiān)督管理局招考聘用編外工作人員3人筆試題庫(kù)含答案詳解
- 教科版六年級(jí)科學(xué)下冊(cè)全冊(cè)教案
- 220kV升壓站工程施工組織設(shè)計(jì)
- 6G網(wǎng)絡(luò)架構(gòu)展望白皮書(2023.2)-32正式版
- 車床操作作業(yè)指導(dǎo)書
評(píng)論
0/150
提交評(píng)論