成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java常見的30個誤區與細節!

開發 后端
在Java中,沒有goto語句。因為大量使用goto語句會降低程序的可讀性和可維護性,所以Java語言取消了goto的使用。同時,為了避免程序員自行使用goto所帶來的混亂,Java語言仍將goto定義為一個關鍵字,但是沒有定義任何語法,故稱為“保留字”。

[[226844]]

1、在Java中,沒有goto語句。因為大量使用goto語句會降低程序的可讀性和可維護性,所以Java語言取消了goto的使用。同時,為了避免程序員自行使用goto所帶來的混亂,Java語言仍將goto定義為一個關鍵字,但是沒有定義任何語法,故稱為“保留字”。

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

3   定義名稱時盡量避免使用$,因為編譯器在對.java文件進行編譯的時候,會將”$”編譯成頂層類型與底層類型的連接符。見下例:

 

  1. package  com.javastack.Test; 
  2. public class Outer$Inner { 
  3.   public static void main(String[] args) {  
  4.      Outer o = new Outer(); 
  5.      Outer.Inner i = o.new Inner(); 
  6.      i.innerPrint(); 
  7.      } 
  8. class Outer { 
  9.    class Inner {    
  10.      void innerPrint() {   
  11.        System.out.println("Inner Print!"); 
  12.      } 
  13.   } 

在編譯(javac Test3.java)這段代碼的時候,編譯器會報以下錯誤:Test.java:12: 錯誤: 類重復: com.javastack.Test.Outer.Inner class Inner{ ^

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

 

  1. // char c1 = 'u00a'
  2. // char c2 = 'u00d'

在程序中出現這兩行代碼編譯報錯。這兩個Unicode碼分別表示”換行”和”回車”,所以,在編譯器編譯的時候,代碼是這樣的:

 

  1. // char c1 = '' 
  2. // char c2 = ''

5   Unicode碼使用16位字符編碼,在Java中用char類型來表示。現在Unicode已經擴展到一百萬個字符,超出16位限制的成為增補字符。所有增補字符都不能用字符常量來表示。

6   當short,byte,char參加運算時,結果為int型,而非與較高的類型相同。如果變量是byte,short,byte類型,當對其賦予編譯時期的常量,而該常量又沒有超過變量的取值范圍時,編譯器就可以進行隱式的收縮轉換。這種隱式的收縮轉換是安全的,因為該收縮轉換只適用于變量的賦值,而不適用于方法調用語句,即不適用于方法調用時的參數傳遞。(詳見java中默認類型轉換的小問題)

7   注意char類型,這是一個無符號類型。因此,char與short或char與byte之間的轉換必須顯示地使用類型轉換。 從byte到char的轉換為擴展收縮轉換,該轉換比較特殊,即先將byte擴展轉換到int,然后再收縮到char。

8   在整型數據間的擴展轉換中,如果操作數是char類型(無符號類型),則進行無符號擴展,擴展位為0.如果操作數是byte,short或int(有符號類型),則進行有符號擴展,擴展位為該變量的符號位。

9   整型數據之間的收縮轉換,僅僅是截斷并丟棄高位,不做任何其他處理。

10   0.1+0.2不等于0.3.System.out.println((double)0.1+(double)0.2);這條語句的輸出結果是0.30000000000000004。因為計算機使用二進制來存儲數據,而很多小數都不能夠準確地使用二進制來表示(事實上,大多數地小數都是近似的),就像使用十進制小數不能準確地表示1/3這樣地分數一樣。大多數地浮點型,在計算機中只是近似地存儲其值,而不像整型那樣準確地存儲。又例,這是一個死循環:for(float f = 10.1f;f != 11;f+=0.1f){}

11 float類型可以保留7~8個有效數字,而double類型可以保留15~16個有效數字,因而當int類型或long類型數值多于double或float地有效數字時,該值的一些***有效位就會丟失,從而造成精度丟失,這時,就會采用IEEE754最近舍入模式,提取與該整型值最接近的浮點值。盡管整型向浮點型的轉換屬于擴展轉換,但當數值很大或很小(絕對值很大)時,就會產生一定的精度丟失。

12  i+++j如何計算?(這個問題在C/C++)中討論是沒有多大意義的,因為C/C++依賴于實現的硬件結構,不同的環境結果也會不同。不過在Java中,這個結果是固定的,不受其運行的硬件環境與平臺的影響) 答:根據貪心規則,前置++優于后置++,結果是(i++)+j

13  i++和++i其實都是先+1,再賦值。++i,沒什么好說的;i++,以j=i++;為例在底層的實現是:temp = i;i = i + 1; j = temp; 所以,i=15;i=i++;這個表達式的結果是15.(因為加一之后又執行了一次賦值,從16變回15)

14   +0與-0在浮點類型變量存儲中,符號位是不同的。當-0和+0參與浮點類型的相關運算(例如相除與求余運算)時,可以產生不同的結果。

15   浮點的相除與求余運算不同與整型的相除與求余運算,當除數為0時,浮點運算不會產生ArithmeticException異常。

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

17   由于String對象是不可改變的,因此具有線程安全性,可以自由地實現共享。

18   在String類內部,是使用一個字符數組(char[])來維護字符序列的。String的***長度也就是字符數組的***長度,理論上***長度為int類型的***值,即2147483647.在實際中,一般可獲取的***值小于理論***值。

19  main()方法在表現行為上,與其他方法基本相同,可以重載,由其他方法調用,繼承,隱藏,也可以拋出異常,帶有類型參數。我們也可以在一個程序中通過反射來調用main方法(或其他方法)。

20 當兩個或多個方法的名稱相同,而參數列表不同時,這幾個方法就構成了重載。重載方法可以根據參數列表對應的類型與參數的個數來區分,但是,參數的名稱、方法的返回類型,方法的異常列表與類型參數不能作為區分重載方法的條件。

21   究竟選擇哪個方法調用,順序是這樣的:

  • 在***階段,自動裝箱(拆箱)與可變參數不予考慮,搜索對應形參類型可以匹配實參類型并且形參個數與實參個數相同的方法;
  • 如果在步驟一不存在符合條件的方法,在第二階段,自動裝箱與拆箱將會執行。
  • 如果在步驟二中不存在符合條件的方法,在第三階段,可變參數的方法將會考慮。
  • 如果3個階段都沒有搜索到符合條件的方法,將會產生編譯錯誤。如果如何條件的方法多于一個,將會選擇最明確的方法。最明確的方法定義為:如果A方法的形參列表類型對應的都可以賦值給B方法的形參列表類型,則A方法比B方法明確。如果無法選出最明確的方法,則會產生編譯錯誤。

22   重寫和隱藏的本質區別是:重寫是動態綁定的,根據運行時引用所指向對象的實際類型來決定調用相關類的成員。而隱藏是靜態綁定的,根據編譯時引用的靜態類型來決定調用的相關成員。換句話說,如果子類重寫了父類的方法,當父類的引用指向子類對象時,通過父類的引用調用的是子類方法。如果子類隱藏了父類的方法(成員變量),通過父類的引用調用的仍是父類的方法(成員變量)。

23   構造器是遞歸調用的,子類的構造器會調用父類的構造器,直到調用Object類的構造器為止。

24   構造器沒有創建對象,構造器是使用new創建對象時由系統調用的,用來初始化類的實例成員。從順序上說,先是創建對象,然后再調用構造器的。(構造器并沒有產生新的對象)

25   默認的構造器不為空,該構造器會調用父類的無參構造器,并可能執行實例成員變量的初始化。所以,默認的構造器至少調用了父類的構造器,它做的工作還可能更多,包括實例變量聲明初始化與實例初始化塊,都是在構造器中執行的。

26   當==或!=運算符的兩個操作數的類型一個是基本數據類型,另一個是包裝類引用類型時,將引用類型拆箱轉換為基本數據類型,然后比較兩個基本數據類型的值是否相等。

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

28   接口是完全抽象的設計,不能實例化。使A用new方式創建的借口類型,實際上是創建了一個匿名類,該匿名類實現了接口類型。

29   如果兩個接口聲明了相同的變量x,則當某接口同時繼承這兩個接口,或者某類同時實現這兩個接口時,通過簡單名稱訪問會產生編譯錯誤。

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

原文鏈接:http://www.kawabangga.com/posts/568 

責任編輯:龐桂玉 來源: Java技術棧
相關推薦

2018-04-20 11:19:17

Java誤區細節

2012-05-16 09:29:25

JavaRailsJVM

2014-07-17 09:08:20

Android L

2022-05-27 12:40:25

前端測試項目

2017-11-20 08:56:54

克服容器誤區

2019-07-01 13:43:14

公共云云計算云平臺

2017-11-20 14:18:32

2021-11-15 10:50:52

Java線程池代碼

2021-10-08 09:18:37

物聯網 LPWANIOT

2022-07-31 23:54:24

Linux操作系統

2022-07-31 23:53:37

Linux操作系統設備

2013-02-20 10:13:38

JavaJava初學者

2020-10-09 06:54:22

通信專業誤區

2023-03-09 09:38:01

數據科學

2018-08-17 08:26:25

2020-09-15 15:36:44

多因素身份驗證MFA網絡安全

2010-10-26 13:45:01

Oracle數據庫備份

2017-11-07 11:58:33

2024-12-04 10:19:49

2020-01-14 17:31:46

數據科學誤區人工智能
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲欧美第一视频 | 欧美在线观看一区 | 亚洲欧美第一视频 | 一区二区精品 | 国产精品免费一区二区三区四区 | av影音 | 成人亚洲片 | 成人免费在线播放 | 欧美激情一区 | www..com18午夜观看 | 黄一区二区三区 | 欧美日日 | 99av成人精品国语自产拍 | 欧美另类视频 | 日本超碰 | 毛片视频免费观看 | 亚洲色图网址 | 色婷婷综合久久久久中文一区二区 | 亚洲视频免费 | 97人人爱 | 成人av网站在线观看 | 不卡视频在线 | 成人午夜精品 | 国产精品久久久久无码av | 日本精品视频在线 | 国产成人a亚洲精品 | 在线观看视频一区二区三区 | 久久aⅴ乱码一区二区三区 亚洲欧美综合精品另类天天更新 | 国产区在线观看 | 免费一级黄色录像 | 久久久久久久综合色一本 | 久久精品欧美一区二区三区不卡 | 亚洲国产高清在线观看 | 国产精品久久久99 | 欧美国产精品一区二区三区 | 欧美日韩国产中文字幕 | 亚洲国产成人精品女人久久久 | 欧美视频一区二区三区 | 亚洲三级在线观看 | 免费一区| 国产成人一区二区 |