av手机免费在线观看,国产女人在线视频,国产xxxx免费,捆绑调教一二三区,97影院最新理论片,色之久久综合,国产精品日韩欧美一区二区三区

java語言

Java常見誤區(qū)與細(xì)節(jié)有哪些呢

時(shí)間:2025-02-23 00:58:33 java語言 我要投稿
  • 相關(guān)推薦

Java常見誤區(qū)與細(xì)節(jié)有哪些呢

  Java的常見誤區(qū)與細(xì)節(jié)有哪些呢?看了下面的內(nèi)容相信你就會(huì)清楚了。更多內(nèi)容請關(guān)注應(yīng)屆畢業(yè)生考試網(wǎng)!

  一Java語言基礎(chǔ)中的誤區(qū)

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

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

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

  使用$定義變量名

  package com.laixintao.Test;

  public class Outer$Inner {

  public static void main(String[] args) {

  Outer o = new Outer();

  Outer.Inner i = o.new Inner();

  i.innerPrint();

  }

  }

  class Outer {

  class Inner {

  void innerPrint() {

  System.out.println("Inner Print!");

  }

  }

  }

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

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

  Unicode編譯錯(cuò)誤

  // char c1 = '\u00a';

  // char c2 = '\u00d';

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

  Unicode編譯

  // char c1 = '

  ';

  // char c2 = '

  ';

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

  6 當(dāng) short, byte, char參加運(yùn)算時(shí),結(jié)果為 int型,而非與較高的類型相同。

  如果變量是 byte, short, byte類型,當(dāng)對其賦予編譯時(shí)期的常量,而該常量又沒有超過變量的'取值范圍時(shí),,編譯器就可以進(jìn)行隱式的收縮轉(zhuǎn)換。這種隱式的收縮轉(zhuǎn)換是安全的,因?yàn)樵撌湛s轉(zhuǎn)換只適用于變量的賦值,而不適用于方法調(diào)用語句,即不適用于方法調(diào)用時(shí)的參數(shù)傳遞。

  7 注意 char類型,這是一個(gè)無符號(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類型(無符號(hào)類型),則進(jìn)行無符號(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棄高位,不做任何其他處理。 1 0.1+0.2不等于0.3.System.out.println((double)0.1+(double)0.2);這條語句的輸出結(jié)果是 / /http://www.pprar.com 0.30000000000000004。因?yàn)橛?jì)算機(jī)使用二進(jìn)制來存儲(chǔ)數(shù)據(jù),而很多小數(shù)都不能夠準(zhǔn)確地使用二進(jìn)制來表示(事實(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(float f = 10.1f;f != 11;f+=0.1f){}

  10 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ù)值很大或很小(絕對值很大)時(shí),就會(huì)產(chǎn)生一定的精度丟失。

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

  12 i++和++i其實(shí)都是先+1,再賦值。++i,沒什么好說的;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)

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

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

  二、Java面向?qū)ο笾械恼`區(qū)

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

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

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

  18 main()方法在表現(xiàn)行為上,與其他方法基本相同,可以重載,由其他方法調(diào)用,繼承,隱藏,也可以拋出異常,帶有類型參數(shù)。我們也可以在一個(gè)程序中通過反射來調(diào)用 main方法 (或其他方法)。 2當(dāng)兩個(gè)或多個(gè)方法的名稱相同,而參數(shù)列表不同時(shí),這幾個(gè)方法就構(gòu)成了重載。重載方法可以根據(jù)參數(shù)列表對應(yīng)的類型與參數(shù)的個(gè)數(shù)來區(qū)分,但是,參數(shù)的名稱、方法的返回類型,方法的異常列表與類型參數(shù)不能作為區(qū)分重載方法的條件。

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

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

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

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

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

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

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

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

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

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

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

  三、Java接口中的誤區(qū)

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

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

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

【Java常見誤區(qū)與細(xì)節(jié)有哪些呢】相關(guān)文章:

Java語言常見名稱有哪些02-09

java常見的語法錯(cuò)誤有哪些03-24

java建模誤區(qū)有哪些07-26

汽車手剎使用有哪些常見誤區(qū)04-08

常見的統(tǒng)計(jì)誤區(qū)有哪些07-23

常見的財(cái)稅誤區(qū)有哪些05-03

Java語言常見的知識(shí)點(diǎn)混淆問題有哪些03-28

java有哪些優(yōu)勢03-15

新手開車常見的誤區(qū)有哪些05-26