0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Java開發(fā)總出錯(cuò) 這30個(gè)誤區(qū)不應(yīng)再犯

算法&編程學(xué)院 ? 來(lái)源:網(wǎng)絡(luò)整理 ? 作者:工程師3 ? 2018-04-20 14:13 ? 次閱讀

1.在Java中,沒(méi)有g(shù)oto語(yǔ)句。因?yàn)榇罅渴褂胓oto語(yǔ)句會(huì)降低程序的可讀性和可維護(hù)性,所以Java語(yǔ)言取消了goto的使用。同時(shí),為了避免程序員自行使用goto所帶來(lái)的混亂,Java語(yǔ)言仍將goto定義為一個(gè)關(guān)鍵字,但是沒(méi)有定義任何語(yǔ)法,故稱為“保留字”。

2.true、false和null在IDE中雖然以不同的顏色顯示,但是并不是關(guān)鍵字,而是“字面常量”,就和String類型的abc一樣。

3.定義名稱時(shí)盡量避免使用$,因?yàn)榫幾g器在對(duì).java文件進(jìn)行編譯的時(shí)候,會(huì)將”$”編譯成頂層類型與底層類型的連接符。見(jiàn)下例:

Java開發(fā)總出錯(cuò) 這30 個(gè)誤區(qū)不應(yīng)再犯

在編譯(javacTest3.java)這段代碼的時(shí)候,編譯器會(huì)報(bào)以下錯(cuò)誤:Test.java:12:錯(cuò)誤:類重復(fù):com.javastack.Test.Outer.InnerclassInner{^

4Unicode轉(zhuǎn)義字符處理的非常早,在解析程序之前。例如:

在程序中出現(xiàn)這兩行代碼編譯報(bào)錯(cuò)。這兩個(gè)Unicode碼分別表示”換行”和”回車”,所以,在編譯器編譯的時(shí)候,代碼是這樣的:

Java開發(fā)總出錯(cuò) 這30 個(gè)誤區(qū)不應(yīng)再犯

5.Unicode碼使用16位字符編碼,在Java中用char類型來(lái)表示?,F(xiàn)在Unicode已經(jīng)擴(kuò)展到一百萬(wàn)個(gè)字符,超出16位限制的成為增補(bǔ)字符。所有增補(bǔ)字符都不能用字符常量來(lái)表示。

6.當(dāng)short,byte,char參加運(yùn)算時(shí),結(jié)果為int型,而非與較高的類型相同。如果變量是byte,short,byte類型,當(dāng)對(duì)其賦予編譯時(shí)期的常量,而該常量又沒(méi)有超過(guò)變量的取值范圍時(shí),編譯器就可以進(jìn)行隱式的收縮轉(zhuǎn)換。這種隱式的收縮轉(zhuǎn)換是安全的,因?yàn)樵撌湛s轉(zhuǎn)換只適用于變量的賦值,而不適用于方法調(diào)用語(yǔ)句,即不適用于方法調(diào)用時(shí)的參數(shù)傳遞。(詳見(jiàn)java中默認(rèn)類型轉(zhuǎn)換的小問(wèn)題)

7.注意char類型,這是一個(gè)無(wú)符號(hào)類型。因此,char與short或char與byte之間的轉(zhuǎn)換必須顯示地使用類型轉(zhuǎn)換。從byte到char的轉(zhuǎn)換為擴(kuò)展收縮轉(zhuǎn)換,該轉(zhuǎn)換比較特殊,即先將byte擴(kuò)展轉(zhuǎn)換到int,然后再收縮到char。

8.在整型數(shù)據(jù)間的擴(kuò)展轉(zhuǎn)換中,如果操作數(shù)是char類型(無(wú)符號(hào)類型),則進(jìn)行無(wú)符號(hào)擴(kuò)展,擴(kuò)展位為0.如果操作數(shù)是byte,short或int(有符號(hào)類型),則進(jìn)行有符號(hào)擴(kuò)展,擴(kuò)展位為該變量的符號(hào)位。

9.整型數(shù)據(jù)之間的收縮轉(zhuǎn)換,僅僅是截?cái)嗖G棄高位,不做任何其他處理。

10.0.1+0.2不等于0.3.System.out.println((double)0.1+(double)0.2);這條語(yǔ)句的輸出結(jié)果是0.30000000000000004。因?yàn)橛?jì)算機(jī)使用二進(jìn)制來(lái)存儲(chǔ)數(shù)據(jù),而很多小數(shù)都不能夠準(zhǔn)確地使用二進(jìn)制來(lái)表示(事實(shí)上,大多數(shù)地小數(shù)都是近似的),就像使用十進(jìn)制小數(shù)不能準(zhǔn)確地表示1/3這樣地分?jǐn)?shù)一樣。大多數(shù)地浮點(diǎn)型,在計(jì)算機(jī)中只是近似地存儲(chǔ)其值,而不像整型那樣準(zhǔn)確地存儲(chǔ)。又例,這是一個(gè)死循環(huán):for(floatf=10.1f;f!=11;f+=0.1f){}

11.float類型可以保留7~8個(gè)有效數(shù)字,而double類型可以保留15~16個(gè)有效數(shù)字,因而當(dāng)int類型或long類型數(shù)值多于double或float地有效數(shù)字時(shí),該值的一些最低有效位就會(huì)丟失,從而造成精度丟失,這時(shí),就會(huì)采用IEEE754最近舍入模式,提取與該整型值最接近的浮點(diǎn)值。盡管整型向浮點(diǎn)型的轉(zhuǎn)換屬于擴(kuò)展轉(zhuǎn)換,但當(dāng)數(shù)值很大或很?。ń^對(duì)值很大)時(shí),就會(huì)產(chǎn)生一定的精度丟失。

12.i+++j如何計(jì)算?(這個(gè)問(wèn)題在C/C++)中討論是沒(méi)有多大意義的,因?yàn)镃/C++依賴于實(shí)現(xiàn)的硬件結(jié)構(gòu),不同的環(huán)境結(jié)果也會(huì)不同。不過(guò)在Java中,這個(gè)結(jié)果是固定的,不受其運(yùn)行的硬件環(huán)境與平臺(tái)的影響)答:根據(jù)貪心規(guī)則,前置++優(yōu)于后置++,結(jié)果是(i++)+j

13.i++和++i其實(shí)都是先+1,再賦值。++i,沒(méi)什么好說(shuō)的;i++,以j=i++;為例在底層的實(shí)現(xiàn)是:temp=i;i=i+1;j=temp;所以,i=15;i=i++;這個(gè)表達(dá)式的結(jié)果是15.(因?yàn)榧右恢笥謭?zhí)行了一次賦值,從16變回15)

14.+0與-0在浮點(diǎn)類型變量存儲(chǔ)中,符號(hào)位是不同的。當(dāng)-0和+0參與浮點(diǎn)類型的相關(guān)運(yùn)算(例如相除與求余運(yùn)算)時(shí),可以產(chǎn)生不同的結(jié)果。

15.浮點(diǎn)的相除與求余運(yùn)算不同與整型的相除與求余運(yùn)算,當(dāng)除數(shù)為0時(shí),浮點(diǎn)運(yùn)算不會(huì)產(chǎn)生ArithmeticException異常。

16.String類是非可變類,其對(duì)象一旦創(chuàng)建,就不可銷毀。String類那些看似修改字符序列的方法實(shí)際上都是返回新創(chuàng)建的String對(duì)象,而不是修改自身對(duì)象。

17.由于String對(duì)象是不可改變的,因此具有線程安全性,可以自由地實(shí)現(xiàn)共享。

18.在String類內(nèi)部,是使用一個(gè)字符數(shù)組(char[])來(lái)維護(hù)字符序列的。String的最大長(zhǎng)度也就是字符數(shù)組的最大長(zhǎng)度,理論上最大長(zhǎng)度為int類型的最大值,即2147483647.在實(shí)際中,一般可獲取的最大值小于理論最大值。

19.main()方法在表現(xiàn)行為上,與其他方法基本相同,可以重載,由其他方法調(diào)用,繼承,隱藏,也可以拋出異常,帶有類型參數(shù)。我們也可以在一個(gè)程序中通過(guò)反射來(lái)調(diào)用main方法(或其他方法)。

20.當(dāng)兩個(gè)或多個(gè)方法的名稱相同,而參數(shù)列表不同時(shí),這幾個(gè)方法就構(gòu)成了重載。重載方法可以根據(jù)參數(shù)列表對(duì)應(yīng)的類型與參數(shù)的個(gè)數(shù)來(lái)區(qū)分,但是,參數(shù)的名稱、方法的返回類型,方法的異常列表與類型參數(shù)不能作為區(qū)分重載方法的條件。

21.究竟選擇哪個(gè)方法調(diào)用,順序是這樣的:

在第一階段,自動(dòng)裝箱(拆箱)與可變參數(shù)不予考慮,搜索對(duì)應(yīng)形參類型可以匹配實(shí)參類型并且形參個(gè)數(shù)與實(shí)參個(gè)數(shù)相同的方法;

如果在步驟一不存在符合條件的方法,在第二階段,自動(dòng)裝箱與拆箱將會(huì)執(zhí)行。

如果在步驟二中不存在符合條件的方法,在第三階段,可變參數(shù)的方法將會(huì)考慮。

如果3個(gè)階段都沒(méi)有搜索到符合條件的方法,將會(huì)產(chǎn)生編譯錯(cuò)誤。如果如何條件的方法多于一個(gè),將會(huì)選擇最明確的方法。最明確的方法定義為:如果A方法的形參列表類型對(duì)應(yīng)的都可以賦值給B方法的形參列表類型,則A方法比B方法明確。如果無(wú)法選出最明確的方法,則會(huì)產(chǎn)生編譯錯(cuò)誤。

22.重寫和隱藏的本質(zhì)區(qū)別是:重寫是動(dòng)態(tài)綁定的,根據(jù)運(yùn)行時(shí)引用所指向?qū)ο蟮膶?shí)際類型來(lái)決定調(diào)用相關(guān)類的成員。而隱藏是靜態(tài)綁定的,根據(jù)編譯時(shí)引用的靜態(tài)類型來(lái)決定調(diào)用的相關(guān)成員。換句話說(shuō),如果子類重寫了父類的方法,當(dāng)父類的引用指向子類對(duì)象時(shí),通過(guò)父類的引用調(diào)用的是子類方法。如果子類隱藏了父類的方法(成員變量),通過(guò)父類的引用調(diào)用的仍是父類的方法(成員變量)。

23.構(gòu)造器是遞歸調(diào)用的,子類的構(gòu)造器會(huì)調(diào)用父類的構(gòu)造器,直到調(diào)用Object類的構(gòu)造器為止。

24.構(gòu)造器沒(méi)有創(chuàng)建對(duì)象,構(gòu)造器是使用new創(chuàng)建對(duì)象時(shí)由系統(tǒng)調(diào)用的,用來(lái)初始化類的實(shí)例成員。從順序上說(shuō),先是創(chuàng)建對(duì)象,然后再調(diào)用構(gòu)造器的。(構(gòu)造器并沒(méi)有產(chǎn)生新的對(duì)象)

25.默認(rèn)的構(gòu)造器不為空,該構(gòu)造器會(huì)調(diào)用父類的無(wú)參構(gòu)造器,并可能執(zhí)行實(shí)例成員變量的初始化。所以,默認(rèn)的構(gòu)造器至少調(diào)用了父類的構(gòu)造器,它做的工作還可能更多,包括實(shí)例變量聲明初始化與實(shí)例初始化塊,都是在構(gòu)造器中執(zhí)行的。

26.當(dāng)==或!=運(yùn)算符的兩個(gè)操作數(shù)的類型一個(gè)是基本數(shù)據(jù)類型,另一個(gè)是包裝類引用類型時(shí),將引用類型拆箱轉(zhuǎn)換為基本數(shù)據(jù)類型,然后比較兩個(gè)基本數(shù)據(jù)類型的值是否相等。

27.在Java中,數(shù)組也是類,數(shù)組聲明的引用變量指向數(shù)組類型的對(duì)象。所有的數(shù)組都繼承Object類,并且實(shí)現(xiàn)了java.lang.Cloneable與java.io.Serializable接口。數(shù)組的成員包括變量length(隱式存在)與從Object類繼承的成員。Cloneable與Serializable是兩個(gè)標(biāo)記的接口,這兩個(gè)接口中沒(méi)有顯式聲明任何成員。

28.接口是完全抽象的設(shè)計(jì),不能實(shí)例化。使A用new方式創(chuàng)建的借口類型,實(shí)際上是創(chuàng)建了一個(gè)匿名類,該匿名類實(shí)現(xiàn)了接口類型。

29.如果兩個(gè)接口聲明了相同的變量x,則當(dāng)某接口同時(shí)繼承這兩個(gè)接口,或者某類同時(shí)實(shí)現(xiàn)這兩個(gè)接口時(shí),通過(guò)簡(jiǎn)單名稱訪問(wèn)會(huì)產(chǎn)生編譯錯(cuò)誤。

30.如果兩個(gè)接口中聲明了相同名稱的方法m,并且兩個(gè)方法沒(méi)有構(gòu)成重載,則當(dāng)某接口能夠同時(shí)繼承這兩個(gè)接口,或者某類能夠同時(shí)繼承這兩個(gè)接口時(shí),必須存在一種方法簽名,使得該簽名同時(shí)為兩個(gè)m方法簽名的子簽名,并且在方法的返回類型上,必須存在一種類型,使得該類型同時(shí)為兩個(gè)m方法返回類型的可替換類型。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2969

    瀏覽量

    104790
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    再犯錯(cuò)!走出智能穿戴設(shè)備四大誤區(qū)

    生活中,很多朋友因?yàn)樗巴媸謾C(jī)熬到了半夜、工作沒(méi)做完到凌晨等原因,不能保證足夠的睡眠。在使用智能手環(huán)后,手環(huán)通過(guò)提醒監(jiān)督功能使他們調(diào)整了自己的睡眠時(shí)間。但即使如此,他們?nèi)匀凰恍选⑸眢w疲憊不堪。原來(lái)他們是走進(jìn)了一個(gè)叫做“我以為我睡夠八小時(shí)就夠用”的誤區(qū)。
    發(fā)表于 08-27 09:10 ?1925次閱讀

    Java新手入門的30個(gè)基本概念

    Java新手入門的30個(gè)基本概念
    發(fā)表于 08-16 20:02

    HarmonyOSAPP開發(fā)-JAVA-FullScreenAbility體驗(yàn)分享

    效果如下二、開發(fā)流程第一步 建立項(xiàng)目新建一個(gè)java的應(yīng)用項(xiàng)目然后構(gòu)建完成項(xiàng)目后在jltf_template下new->module選擇phone下的Full Screen模板登錄華為開發(fā)
    發(fā)表于 08-03 10:07

    嵌入式MCU開發(fā)中有哪幾個(gè)常見(jiàn)誤區(qū)

    淺談嵌入式MCU開發(fā)中的三個(gè)常見(jiàn)誤區(qū)原創(chuàng)2017-09-30胡恩偉汽車電子expert成長(zhǎng)之路目錄(1)嵌入式MCU與MPU的區(qū)分(2)誤區(qū)
    發(fā)表于 11-01 08:54

    電池使用保養(yǎng)的五個(gè)誤區(qū)

    電池使用保養(yǎng)的五個(gè)誤區(qū) 以下電池使用五大誤區(qū): 1.電
    發(fā)表于 11-16 14:12 ?406次閱讀

    電路設(shè)計(jì)的14個(gè)誤區(qū)

    電路教程相關(guān)知識(shí)的資料,關(guān)于電路設(shè)計(jì)的14個(gè)誤區(qū)
    發(fā)表于 10-10 14:34 ?0次下載

    java開發(fā)

    Java開發(fā)人員需要花費(fèi)大量的時(shí)間埋頭于Java代碼中,使用各種不同的IDE(Intergrated Development Environment)來(lái)開發(fā)
    發(fā)表于 08-28 10:47 ?9次下載

    Java異常選擇和使用的誤區(qū)和經(jīng)驗(yàn)總結(jié)

    本文著重介紹了 Java 異常選擇和使用中的一些誤區(qū),希望各位讀者能夠熟練掌握異常處理的一些注意點(diǎn)和原則,注意總結(jié)和歸納。只有處理好了異常,才能提升開發(fā)人員的基本素養(yǎng),提高系統(tǒng)的健壯性,提升用戶體驗(yàn),提高產(chǎn)品的價(jià)。
    發(fā)表于 11-27 08:54 ?1386次閱讀
    <b class='flag-5'>Java</b>異常選擇和使用的<b class='flag-5'>誤區(qū)</b>和經(jīng)驗(yàn)總結(jié)

    Java開發(fā)環(huán)境配置(win7_64bit)

    搭建Java開發(fā)環(huán)境一般需要同時(shí)安裝JDK和JRE。 JDK:指Java開發(fā)工具包Java Development Kit,
    的頭像 發(fā)表于 02-01 15:03 ?3245次閱讀
    <b class='flag-5'>Java</b><b class='flag-5'>開發(fā)</b>環(huán)境配置(win7_64bit)

    java開發(fā)中遇到的難點(diǎn)有哪些_java開發(fā)常見(jiàn)的問(wèn)題及解決辦法

    本文主要介紹的是java開發(fā),首先介紹了java開發(fā)的過(guò)程,其次介紹了java開發(fā)中遇到的難點(diǎn),
    發(fā)表于 04-26 16:49 ?9.4w次閱讀

    個(gè)名合格的Java開發(fā)工程師應(yīng)該怎樣提升自己

    對(duì)于一個(gè)Java開發(fā)來(lái)說(shuō),編程技能毋庸置疑是很重要的。
    的頭像 發(fā)表于 05-08 17:08 ?3572次閱讀

    開發(fā)人員必知的八個(gè)優(yōu)秀的Java開發(fā)工具

    Java是計(jì)算機(jī)應(yīng)用程序編程語(yǔ)言,被廣泛用于創(chuàng)建Web應(yīng)用、服務(wù)器處理、用戶端的API開發(fā)乃至數(shù)據(jù)庫(kù)等多個(gè)領(lǐng)域。今天給大家介紹8個(gè)優(yōu)秀的Java開發(fā)
    的頭像 發(fā)表于 10-08 14:18 ?2279次閱讀

    開發(fā)AGV時(shí)需要避免的5個(gè)常見(jiàn)誤區(qū) 你知道哪些?

    基于十余年開發(fā)經(jīng)驗(yàn),BlueBotics總結(jié)的五大常見(jiàn)誤區(qū)! 自動(dòng)導(dǎo)引車(AGV)的開發(fā)是一項(xiàng)復(fù)雜的業(yè)務(wù)。雖然一個(gè)強(qiáng)大的、易于使用的移動(dòng)機(jī)器人可以在未來(lái)幾年內(nèi)推動(dòng)您的車輛業(yè)務(wù),但要產(chǎn)生
    的頭像 發(fā)表于 03-27 11:38 ?2187次閱讀

    嵌入式開發(fā)-淺談嵌入式MCU開發(fā)中的三個(gè)常見(jiàn)誤區(qū)

    淺談嵌入式MCU開發(fā)中的三個(gè)常見(jiàn)誤區(qū)原創(chuàng)2017-09-30胡恩偉汽車電子expert成長(zhǎng)之路目錄(1)嵌入式MCU與MPU的區(qū)分(2)誤區(qū)
    發(fā)表于 10-26 12:06 ?10次下載
    嵌入式<b class='flag-5'>開發(fā)</b>-淺談嵌入式MCU<b class='flag-5'>開發(fā)</b>中的三<b class='flag-5'>個(gè)</b>常見(jiàn)<b class='flag-5'>誤區(qū)</b>

    阿里巴巴Java開發(fā)手冊(cè)

    Alibaba Java開發(fā)手冊(cè),Alibaba Java開發(fā)手冊(cè)
    發(fā)表于 05-24 14:58 ?4次下載