資源描述:
《Java初學(xué)者的30個(gè)常見(jiàn)問(wèn)題.docx》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)。
1、Java初學(xué)者的30個(gè)常見(jiàn)問(wèn)題 本文回答了30個(gè)Java入門(mén)級(jí)初學(xué)者的常見(jiàn)問(wèn)題。我可以用%除以一個(gè)小數(shù)嗎?a+=b和a=a+b的效果有區(qū)別嗎?聲明一個(gè)數(shù)組為什么需要花費(fèi)大量時(shí)間?為什么Java庫(kù)不用隨機(jī)pivot方式的快速排序? 1.2基本數(shù)據(jù)類型 Q.為什么-0/3結(jié)果是0,而-0.0/3.0結(jié)果是-0.0?(注意后邊的結(jié)果0帶負(fù)號(hào)) A.在Java里,整數(shù)是用補(bǔ)碼表示的。在補(bǔ)碼中0只有一種表示方法。另一方面,浮點(diǎn)數(shù)則是用IEEE標(biāo)準(zhǔn)表示的,對(duì)于0有兩種表示方法,0和-0。 Q.我可以
2、用%除以一個(gè)小數(shù)嗎? A.當(dāng)然可以。比如,如果angle是一個(gè)非負(fù)數(shù),那么angle%(2*Math.PI)就會(huì)把a(bǔ)ngle轉(zhuǎn)換到0到2π之間。 Q.當(dāng)ab都是基本類型變量時(shí),a+=b和a=a+b的效果有區(qū)別嗎? A.當(dāng)a和b的類型不同時(shí),那兩條語(yǔ)句的效果就可能有區(qū)別。a+=b等同于a=(int)(a+b),這種情況下可以是a是int型,b是float型。但是同等情況下a=a+b就會(huì)編譯報(bào)錯(cuò)。 1.3條件語(yǔ)句和循環(huán)語(yǔ)句 Q.為什么判斷字符串相等不能使用==? A.這反映了基礎(chǔ)類型(int
3、,double,boolean)和引用類型(String)的區(qū)別?! .有沒(méi)有在什么情況下,一條語(yǔ)句塊的花括號(hào)不能省略的? A.在下面的例子中,第一段代碼是合法的,第二段代碼會(huì)引發(fā)編譯錯(cuò)誤。從技術(shù)角度說(shuō),那一條語(yǔ)句是一個(gè)變量聲明,而不是語(yǔ)句,所以會(huì)報(bào)錯(cuò)?! ?.//legal 2.for(inti=0;i<=N;i++){ 3.intx=5; 4.} 5. 6.//illegal 7.for(inti=0;i<=N;i++) 8.intx=5; Q.在下面的兩段代碼里,有沒(méi)有情況
4、,它們的效果不一樣? 1.for(;){ 2. 3.} 4. 5.; 6.while(){ 7. 8. 9.} A.有的。如果在循環(huán)塊里使用continue語(yǔ)句。在for的代碼里,計(jì)數(shù)器會(huì)加一;而在while的代碼里,因?yàn)楸籧ontinue略過(guò)了,計(jì)數(shù)器不加一?! ?.4數(shù)組
5、Q.某些Java開(kāi)發(fā)人員使用inta[]而不是int[]a去聲明一個(gè)數(shù)組。這兩者有什么區(qū)別? A.在Java中這兩種用法都是合法的,他們的作用都是一樣的。前者是在C中的定義數(shù)組的方法。后者是JAVA推薦的方法,因?yàn)樗膶?xiě)法int[]更能表明這是一個(gè)int的數(shù)組?! .為什么數(shù)組下標(biāo)從0開(kāi)始而不是從1開(kāi)始? A.這種傳統(tǒng)起源于機(jī)器語(yǔ)言的編程方法。在機(jī)器語(yǔ)言中,數(shù)組下標(biāo)被用來(lái)計(jì)算元素位置與第一個(gè)元素之間的偏移量。如果從1開(kāi)始的話,計(jì)算偏移時(shí)還需要做一次減法運(yùn)算,那是種浪費(fèi)。 Q.如果我用負(fù)數(shù)作為
6、數(shù)組下標(biāo)會(huì)發(fā)生什么事? A.下標(biāo)小于0或者大于等于數(shù)組長(zhǎng)度,JAVA運(yùn)行時(shí)會(huì)拋出ArrayIndexOutOfBoundsException異常,并且中止程序運(yùn)行?! .使用數(shù)組時(shí)還有其他需要注意的陷阱嗎? A.需要記住,JAVA在你創(chuàng)建一個(gè)數(shù)組時(shí)會(huì)去初始化它,所以聲明一個(gè)數(shù)組需要O(N)的時(shí)間?! .既然a[]是一個(gè)數(shù)組,為什么System.out.println(a)會(huì)打印出一個(gè)16進(jìn)制的數(shù),就像@f62373這樣,而不是打印出數(shù)組的元素? A.好問(wèn)題。這條語(yǔ)句打印出的是數(shù)組在內(nèi)存中的
7、地址,不幸的是,在絕大多數(shù)情況下,這不是你需要的?! ?.5輸入輸出語(yǔ)句 Q.我可以從標(biāo)準(zhǔn)input中重新讀一次數(shù)據(jù)嗎? A.不可以,你只能讀一次?! .怎樣輸入end-of-file(eof)符號(hào)? A.操作系統(tǒng)自動(dòng)包括它了?! .使用printf()時(shí)還有哪些用法? A.對(duì)于整數(shù)來(lái)說(shuō),使用o輸出八進(jìn)制,使用x輸出十六進(jìn)制。對(duì)于浮點(diǎn)數(shù)來(lái)說(shuō),使用e或者g輸出科學(xué)計(jì)數(shù)法形式。 Q.行結(jié)束的符號(hào)是什么? A.不同的文件系統(tǒng)使用了不同的符號(hào)。在Unix系統(tǒng)上,新行的符號(hào)是'';在Win
8、dows系統(tǒng)上,每一行都有兩個(gè)字符組成的字符串終結(jié)"r";在Macs系統(tǒng)上,終結(jié)符號(hào)是"r"。如果要打印行號(hào),可以使用System.out.println(),或者使用下面的語(yǔ)句得到當(dāng)前操作系統(tǒng)下的行結(jié)束符: 1.StringNEWLINE=System.getProperty("line.separator"); Q.下面兩種寫(xiě)法,哪一種更有效率? 1.Strings; 2.while(!StdIn.isEmpty()){while(!StdIn