復習下JavaSE的基礎知識吧,面試的時候可是會經(jīng)常問到,也不能說不會,只是突然問到,有的就真的忘了,哈哈,下面問題和答案都來自整理,如有錯誤之處,請指出,謝謝啦~

**** 1.面向對象的特征有哪些方面?****
封裝 最常見的是把屬性私有化封裝在一個類里面,只能通過方法去訪問
繼承 子類繼承父類,從而繼承了父類的方法和屬性
抽象 比如一個英雄類,抽象出了name,hp這些屬性,使得開發(fā)過程中更加易于理解
多態(tài) 分操作符的多態(tài)和類的多態(tài)。 類的多態(tài)指父類引用指向子類對象,并且有繼承,有重寫。
****2. String是最基本的數(shù)據(jù)類型嗎?****
String是類類型,不是基本類型。
基本類型有八種
這八種基本類型分別是:
整型 (4種) byte、short、int、long
字符型 (1種)char
浮點型 (2種)float、double
布爾型(1種) boolean
****3. int 和 Integer 有什么區(qū)別?****
int 是基本類型32位長度的整數(shù)
Integer 是類類型,是int的封裝類
int和Integer之間可以通過自動裝箱 ,自動拆箱 互相轉換
****4.String 和StringBuffer的區(qū)別?****
String是[immutable]的,其內容一旦創(chuàng)建好之后,就不可以發(fā)生改變。
StringBuffer 是可以變長的,內容也可以發(fā)生改變改變的原理是StringBuffer內部采用了字符數(shù)組存放數(shù)據(jù),在需要增加長度的時候,創(chuàng)建新的數(shù)組,并且把原來的數(shù)據(jù)復制到新的數(shù)組這樣的辦法來實現(xiàn)。
更多細節(jié)可以參考 模仿StringBuffer的 [MyStringBuffer] 類是如何實現(xiàn)的。
****5.運行時異常與一般異常有何異同?****
運行時異常 又叫做非可查異常,在編譯過程中,不要求必須進行顯示捕捉
一般異常 又叫做可查異常,在編譯過程中,必須進行處理,要么捕捉,要么通過[throws] 拋出去.
****6.說出ArrayList,Vector, LinkedList的存儲性能和特性。****
先說ArrayList和Vector
兩者都繼承了抽象類AbstractList,但是Vector是[線程安全的],而ArrayList是非線程安全的
再說[ArrayList和LinkedList的區(qū)別]
ArrayList 是數(shù)組結構,所以定位很快,但是插入和刪除很慢
LinkedList 是雙向鏈表結構,所以插入和刪除很快,但是定位很慢
****7.Collection 和 Collections的區(qū)別。****
[Collection]是接口,是List和Set的父接口
[Collections]是工具類,提供了排序,混淆等等很多實用方法
****8. &和&&的區(qū)別****
& 有兩個作用,分別是 [位與]和 [邏輯與]
&& 就是邏輯與作為邏輯與,
& 和 && 分別表示[長路與和短路與] 長路與 兩側,都會被運算短路與 只要第一個是false,第二個就不進行運算了
****9. HashMap和Hashtable的區(qū)別****
HashMap和Hashtable都實現(xiàn)了Map接口,都是鍵值對保存數(shù)據(jù)的方式
區(qū)別1: HashMap可以存放 null Hashtable不能存放null
區(qū)別2:HashMap不是[線程安全的類] Hashtable是線程安全的類
****10. final, finally, finalize的區(qū)別****
final
修飾類,方法,基本類型變量,引用的時候分別有不同的意思
修飾類 表示該類不能被繼承
修飾方法 表示該方法不能被重寫
修飾基本類型變量 表示該變量只能被賦值一次
修飾引用 表示該引用只能一次指向對象的機會
finally
是用于異常處理的場面,無論是否有異常拋出,都會執(zhí)行
finalize
是Object的方法,所有類都繼承了該方法。 當一個對象滿足垃圾回收的條件,并且被回收的時候,其finalize()方法就會被調用
****11.Overload和Override的區(qū)別,即重載和重寫的區(qū)別。 Overloaded的方法是否可以改變返回值的類型?****
Overload是方法[重載]的意思,指的是在同一個類里面,方法名一樣,但是參數(shù)不一樣
Override是方法[重寫]的意思,指的是子類繼承了父類的某個方法后,重新又寫了一遍
Overloaded的方法是否可以改變返回值的類型?可以,重載其實本質上就是完全不同的方法,只是恰好取了相同的名字
****12. Error和Exception有什么區(qū)別?****
Error和Exception都實現(xiàn)了[Throwable]接口
Error指的是JVM層面的錯誤,比如內存不足OutOfMemoryError
[Exception ]指的是代碼邏輯的異常,比如下標越界OutOfIndexException
****13.abstract class和interface有什么區(qū)別?****
abstract class [抽象類]和interface[接口]的區(qū)別
使用方式:
抽象類只能夠通過繼承被使用
接口必須通過實現(xiàn)被使用
實現(xiàn)方法:
抽象類不僅可以提供抽象方法,也可以提供實現(xiàn)方法接口只能提供抽象方法發(fā),不能提供實現(xiàn)方法。
但是在JAVA8版本開始,接口可以可以提供實現(xiàn)方法了,前提是要在方法前加一個default修飾符
****14.heap和stack有什么區(qū)別****
存放的###內容###不一樣:
heap: 是存放對象的
stack: 是存放基本類型(int, float, boolean 等等)、引用(對象地址)、方法調用
存去####方式###不一樣:
heap: 是自動增加大小的,所以不需要指定大小,但是存取相對較慢
stack: 是固定大小的,并且是FILO 先入后出的順序,并且存取速度比較快
****15.GC是什么? 為什么要有GC?****
GC是Garbage Collection的縮寫,即#垃圾回收
這里所謂的垃圾,指的是#那些不再被使用的對象,JVM的垃圾回收機制使得開發(fā)人員從無聊、容易犯錯的手動釋放內存資源的過程中解放出來。
開發(fā)人員可以更加專注的進行業(yè)務功能的開發(fā),而資源回收的工作交由更加專業(yè)的垃圾回收機制自動完成。
****16.short s1 = 1; s1 = s1 + 1;有什么錯?****
short s1 = 1; 這一句沒有錯誤,編譯器會自動把1這個整數(shù)處理為short.
s1 = s1 + 1; 右側的表達式會返回一個Int類型的整數(shù),再把這個int類型的整數(shù)賦給short類型的s1的時候,就會出現(xiàn)強制轉換錯誤
****17.Math.round(11.5)等於多少? Math.round(-11.5)等於多少?****
Math.round 的意思是+0.5 # 取整數(shù)
所以 Math.round(11.5) 即 11.5+0.5 = 12
Math.round(-11.5) 即 -11.5+0.5 = -11
****18.String s = new String("xyz");創(chuàng)建了幾個String Object?****
String s = new String("xyz");
首先構造方法 new String("xyz"); 中的"xyz" 這本身就是一個字符串對象
然后 new 關鍵字一定會創(chuàng)建一個對象
所以總共創(chuàng)建了兩個String對象
****19.Java有沒有goto?****
有,goto是關鍵字,但是是#保留字,并不具備功能性
****20.接口是否可繼承接口? 抽象類是否可實現(xiàn)(implements)接口? 抽象類是否可繼承實體類(concrete class)?****
接口是否可繼承接口?
可以,比如List 就繼承了接口Collection
抽象類是否可實現(xiàn)(implements)接口?
可以,比如 [MouseAdapter鼠標監(jiān)聽適配器] 是一個抽象類,并且實現(xiàn)了[MouseListener]接口
抽象類是否可繼承實體類(concrete class)?
可以,所有抽象類,都繼承了Object
好啦,今天就先到這里,上面的題都是一個個知識點,如果發(fā)現(xiàn)哪個不太熟的話,可以去專門看看這塊。加油!