下面也將收集一些經典的java面試題,琢磨這些面試題仍是很是有好處,能夠弄清楚一些容易混淆的知識點,下面面試題的答案部分來自網絡,有些來自本身的理解,都是本身精心概括整理的,有問題的地方,但願你們指出,以便及時更正。 java
1、GC是什麼? 爲何要有GC? 程序員
GC是Gabage Collection的縮寫。中文意思就是垃圾回收。 面試
Java由C++發展而來,在C/C++中,須要程序員本身來釋放無用變量的內存空間,這樣很是繁瑣,程序員也可能忘記釋放或者釋放了不應釋放的內存。同時也會耗費程序員大量精力在釋放內存上。因此,Java就對此作了改進,由系統來管理內存的釋放,再也不由程序員去人工釋放內存空間了。當Java虛擬機發覺內存資源緊張的時候,就會自動地去清理無用變量所佔用的內存空間,若是程序員顯示地調用System.gc(),能夠通知虛擬機加快垃圾回收的速度。但並不能控制垃圾回收。 網絡
2、switch語句可否做用在byte上,可否做用在long上,可否做用在String上? this
在switch(condition)中,condition只能是一個整數表達式或者枚舉常量,整數表達式能夠是int基本類型或Integer包裝類型,因爲byte,short,char均可以隱含轉換爲int,因此這些類型以及這些類型的包裝類型也是能夠的。long不能做用於switch語句中。String在jdk1.7以前的版本也不能夠。 spa
3、"=="和equals方法究竟有什麼區別? 對象
1. "=="是運算符,equals是方法,能夠被重寫。 繼承
2.「==」操做符用來比較變量所對應的內存中所存儲的數值是否相同。因此要比較兩個基本類型的數據或兩個引用變量是否相等,只能用==操做符。由於比較基本數據類型是否相等就是比較其內存中的數值是否相等。比較兩個引用變量是否相等就是比較其內存中的值(該變量所指向的對象的首地址)是否相等,就是比較它們是否指向同一個對象。 接口
3. equals()方法是用於比較兩個獨立對象的內容是否相同。好比:String a=new String("java"); String b=new String("java");這兩個變量指向的是兩個不一樣的對象,它們的首地址是不一樣的,也就是說a和b內存中存儲的值是不一樣的,即a==b會返回false,但它們的內容是相同的,因此a.equals(b)將返回true。 內存
4. equals是Object的方法。其底層實現就是根據「==」來判斷的,這就是說若是一個類或者其父類沒有覆蓋Object的equals()方法,那麼「==」和equals()效果是同樣的。上面就是由於String類已經重寫了equals()方法,因此「==」和equals()獲得的結果纔會不同。
4、構造方法可否被重寫和重載?
一、構造方法是容許被重載的,並且重載構造方法是一種很廣泛的作法,能夠方便使用者靈活的建立對象。重載的構造方法之間相互調用可使用this關鍵字。
二、在繼承過程當中構造方法是不能被繼承的,所以在子類中沒法對父類構造方法從新定義,固然就不能被重寫了。若是須要在子類中調用父類的方法,能夠調用super關鍵字引用。
5、抽象類和接口的區別?
一、接口和抽象類都不能產生對象。接口變量只能指向實現類對象,抽象類變量只能指向子類對象。 二、一個類實現接口或者一個類繼承一個抽象類,都必須實現接口或抽象類中定義的全部抽象方法。除非該類也是抽象類。 三、抽象類中能夠定義抽象方法也能夠定義具體方法。但接口中只能定義抽象方法。 四、接口中定義的變量都是public static final。而抽象類中定義的變量是普通屬性。 五、接口中定義的方法都是public。不能用private,protected修飾。而抽象類中定義的方法能夠是默認、protected、public。 六、一個類只能繼承另外一個類,但能夠實現多個接口。 七、接口和抽象類中均可以不定義抽象方法。