Java容易搞錯的知識點

 以下幾個知識點是非常容易搞混的Java知識點。大家不準開編譯器,並且先不看答案(我在代碼和答案之間空了三行,足夠你擋住下面的答案),要是能全部答對,那Java基礎是挺牢固的。如果答對了,還能分析出具體原因,那算你NB。近段時間有參加一些公司的面試,做了一些基礎題,發現總有掌握得不好的地方。今天一併總結了這些問題,希望對大家有所幫助。如果大家認爲還有其它易混淆的地方,也可以在評論裏發出來,大家一起討論。

一、關於Switch 
代碼:

 

 

 

 

結果: 




分析: 
少了break;所以2以下的case和default都執行了一遍。 

二、Equals和==運算符 
代碼:

 

 

 

 

結果: 
x+y equals z:true 
a == z:false 
x == hello:true 
a == helloworld:true 
a == x+y:false 

分析: 
1.String.equals()方法比較的是字符串的內容,所以(x + y).equals(z)爲true. 
2.“==”比較的是 String 實例的引用,很明顯 a 和z 並不是同一個 String 實例,所以(a == z)爲false. 
3.根據常量池的知識,容易得知(x == "hello")和(a == "hello" + "world")都爲true. 
(常量池指的是在編譯期被確定並被保存在已編譯的.class 文件中的一些數據。它包含了 
關於方法、類、接口等,當然還有字符串常量的信息。也就是所謂的持久代。) 
4.那麼(a == (x + y))爲什麼是false呢?這點暫點有點不大清楚。初步認爲是x+y是引用相加,不能放入常量池。 

三、Override覆蓋 
代碼:

 

 

 

 

結果: 
parent static say 
child say 
分析: 
1.我們創建了一個Parent類的實例。變量 p 的數據類型爲 Parent 類 但是它仍舊是 Child 類的一個實例。因爲Child類覆蓋了Parent類的方法say2(),所以p.say2()調用爲子類的方法。 
2.爲什麼p.say()卻是調用父類Parent的方法呢?因爲Java中規定“實例方法被覆蓋,靜態方法被隱藏”. 
關於Override的一些規則: 
用子類的靜態方法隱藏父類中同樣標識的實例方法是不合法的,編譯器將會報錯; 
用子類的實例方法覆蓋父類中同樣標識的靜態方法也是不合法的,編譯器同樣會報錯; 
帶關鍵字 final的方法(靜態和實例方法)都不能被覆蓋; 
實例方法能夠被覆蓋; 
抽象方法必須在具體類中被覆蓋。 

四、Java強類型 
代碼:

 

 

 

結果: 
7.0 

分析: 
Java 是強類型的 strongly type,它支持8 種基本數據類型。通過對這些基本數據類型用法的嚴格檢查 Java 編譯器能夠及時地在開發過程中捕捉到許多簡單細微的錯誤。基本數據類型的轉換可以隱性地發生,所以轉換時會有精度損失。由於1/4和3/4發生隱性類型轉換,精度損失,不會生成0.25和0.75,所以有分號的數都爲0。 

五、假構造函數 
代碼:

 

 

 

 

結果: 
The value of c :0 

分析: 
public void Constructor()並不是一個真正的構造函數,而是一個方法。所以c的值爲默認值0. 


六、提前引用 
代碼:

 

 

 

結果: 
first = 0 

分析: 
由於在初始化second之前test方法就訪問了它,那麼方法得到的是second的默認值,即 0。 因此輸出結果first= 0,而不是2。假如你使用方法調用來初始化靜態變量,那麼你必須保證 這些方法並不依賴於在它們之後聲明的其它靜態變量。靜態變量以及靜態初始化塊是在類被加載進 JVM 時執行初始化操作的。Java 語言規範8.5節指出“靜態初始化塊和靜態變量是按照其在代碼中出現的順序依次執行初始化操作的,而不能在類變量聲明出現之前就引用它”。 


七、對象引用 
代碼:

 

 

 

結果: 
ab,b 
ab,ab 


分析: 
大家來分析一下這題,我還沒有完全理解。 
我的分析,可能是錯的,哈哈,算是拋磚引玉。 
1.a.append(b);-->ab 。因爲a是引用,所以調用a的方法,相當於直接調用jvm中的a,所做的append也相當於直接在對象上操作,生效。 
2.append方法中第一次b=a,-->b。因爲a,b都爲main方法內局部變量,跨append方法作用域b對a的引用不生效。 
3.main方法中第二次b=a,-->ab。因爲在同一作用域方法中,b對a的引用生效,。

發佈了14 篇原創文章 · 獲贊 3 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章