復習下JavaSE的基礎知識吧,面試的時候可是會經常問到洋魂,也不能說不會绷旗,只是突然問到,有的就真的忘了副砍,哈哈衔肢,下面問題和答案都來自整理,如有錯誤之處豁翎,請指出角骤,謝謝啦~
**** 1.面向對象的特征有哪些方面?****
封裝 最常見的是把屬性私有化封裝在一個類里面心剥,只能通過方法去訪問
繼承 子類繼承父類邦尊,從而繼承了父類的方法和屬性
抽象 比如一個英雄類,抽象出了name,hp這些屬性优烧,使得開發(fā)過程中更加易于理解
多態(tài) 分操作符的多態(tài)和類的多態(tài)蝉揍。 類的多態(tài)指父類引用指向子類對象,并且有繼承匙隔,有重寫疑苫。
****2. String是最基本的數據類型嗎熏版?****
String是類類型,不是基本類型捍掺。
基本類型有八種
這八種基本類型分別是:
整型 (4種) byte撼短、short、int挺勿、long
字符型 (1種)char
浮點型 (2種)float曲横、double
布爾型(1種) boolean
****3. int 和 Integer 有什么區(qū)別?****
int 是基本類型32位長度的整數
Integer 是類類型不瓶,是int的封裝類
int和Integer之間可以通過自動裝箱 禾嫉,自動拆箱 互相轉換
****4.String 和StringBuffer的區(qū)別?****
String是[immutable]的,其內容一旦創(chuàng)建好之后蚊丐,就不可以發(fā)生改變熙参。
StringBuffer 是可以變長的,內容也可以發(fā)生改變改變的原理是StringBuffer內部采用了字符數組存放數據麦备,在需要增加長度的時候孽椰,創(chuàng)建新的數組,并且把原來的數據復制到新的數組這樣的辦法來實現(xiàn)凛篙。
更多細節(jié)可以參考 模仿StringBuffer的 [MyStringBuffer] 類是如何實現(xiàn)的黍匾。
****5.運行時異常與一般異常有何異同?****
運行時異常 又叫做非可查異常呛梆,在編譯過程中锐涯,不要求必須進行顯示捕捉
一般異常 又叫做可查異常,在編譯過程中填物,必須進行處理纹腌,要么捕捉,要么通過[throws] 拋出去.
****6.說出ArrayList,Vector, LinkedList的存儲性能和特性融痛。****
先說ArrayList和Vector
兩者都繼承了抽象類AbstractList壶笼,但是Vector是[線程安全的],而ArrayList是非線程安全的
再說[ArrayList和LinkedList的區(qū)別]
ArrayList 是數組結構雁刷,所以定位很快覆劈,但是插入和刪除很慢
LinkedList 是雙向鏈表結構,所以插入和刪除很快沛励,但是定位很慢
****7.Collection 和 Collections的區(qū)別责语。****
[Collection]是接口,是List和Set的父接口
[Collections]是工具類目派,提供了排序坤候,混淆等等很多實用方法
****8. &和&&的區(qū)別****
& 有兩個作用,分別是 [位與]和 [邏輯與]
&& 就是邏輯與作為邏輯與企蹭,
& 和 && 分別表示[長路與和短路與] 長路與 兩側白筹,都會被運算短路與 只要第一個是false智末,第二個就不進行運算了
****9. HashMap和Hashtable的區(qū)別****
HashMap和Hashtable都實現(xiàn)了Map接口,都是鍵值對保存數據的方式
區(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是方法[重載]的意思,指的是在同一個類里面思币,方法名一樣句惯,但是參數不一樣
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這個整數處理為short.
s1 = s1 + 1; 右側的表達式會返回一個Int類型的整數坷剧,再把這個int類型的整數賦給short類型的s1的時候惰爬,就會出現(xiàn)強制轉換錯誤
****17.Math.round(11.5)等於多少? Math.round(-11.5)等於多少?****
Math.round 的意思是+0.5 # 取整數
所以 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)哪個不太熟的話,可以去專門看看這塊殉摔。加油州胳!