示例 1 :
面向?qū)ο蟮奶卣饔心男┓矫妫?/p>
封裝
最常見的是把屬性私有化封裝在一個類里面驴党,只能通過方法去訪問
繼承
子類繼承父類,從而繼承了父類的方法和屬性
抽象
比如一個英雄類丧慈,抽象出了name,hp這些屬性,使得開發(fā)過程中更加易于理解
多態(tài)
多態(tài)分操作符的多態(tài)和類的多態(tài)渐溶。類的多態(tài)指父類引用指向子類對象,并且有繼承灾而,有重寫。
示例 2 :
String是最基本的數(shù)據(jù)類型嗎扳剿?
String是類類型旁趟,不是基本類型。
基本類型有八種
這八種基本類型分別是:
整型(4種)
字符型(1種)
浮點型(2種)
布爾型(1種)
示例 3 :
int 和 Integer 有什么區(qū)別庇绽?
int 是基本類型32位長度的整數(shù)
Integer 是類類型锡搜,是int的封裝類
int和Integer之間可以通過自動裝箱自動拆箱互相轉(zhuǎn)換、
例 4 :
String 和StringBuffer的區(qū)別瞧掺?
請先登錄String是immutable的,其內(nèi)容一旦創(chuàng)建好之后耕餐,就不可以發(fā)生改變。
StringBuffer 是可以變長的辟狈,內(nèi)容也可以發(fā)生改變
改變的原理是StringBuffer內(nèi)部采用了字符數(shù)組存放數(shù)據(jù)肠缔,在需要增加長度的時候夏跷,創(chuàng)建新的數(shù)組,并且把原來的數(shù)據(jù)復(fù)制到新的數(shù)組這樣的辦法來實現(xiàn)明未。
更多細(xì)節(jié)可以參考模仿StringBuffer的MyStringBuffer類是如何實現(xiàn)的槽华。
示例 5 :
運行時異常與一般異常有何異同?
運行時異常又叫做非可查異常趟妥,在編譯過程中猫态,不要求必須進(jìn)行顯示捕捉
一般異常又叫做可查異常,在編譯過程中披摄,必須進(jìn)行處理亲雪,要么捕捉,要么通過throws拋出去.
示例 6 :
說出ArrayList,Vector, LinkedList的存儲性能和特性疚膊。
先說ArrayList和Vector
兩者都繼承了抽象類AbstractList匆光,但是Vector是線程安全的,而ArrayList是非線程安全的
再說ArrayList和LinkedList的區(qū)別
ArrayList 是數(shù)組結(jié)構(gòu)酿联,所以定位很快终息,但是插入和刪除很慢
LinkedList 是雙向鏈表結(jié)構(gòu),所以插入和刪除很快贞让,但是定位很慢
示例 7 :
Collection 和 Collections的區(qū)別周崭。
首先不要說成了一個是單數(shù),一個是復(fù)數(shù)喳张。续镇。。
Collection是接口销部,是List和Set的父接口
Collections是工具類摸航,提供了排序,混淆等等很多實用方法
示例 8 :
&和&&的區(qū)別請先登錄
& 有兩個作用舅桩,分別是位與和邏輯與
&& 就是邏輯與
作為邏輯與酱虎, & 和 && 分別表示長路與和短路與
長路與兩側(cè),都會被運算
短路與只要第一個是false擂涛,第二個就不進(jìn)行運算了
示例 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
final修飾類,方法撒妈,基本類型變量恢暖,引用的時候分別有不同的意思
修飾類表示該類不能被繼承
修飾方法表示該方法不能被重寫
修飾基本類型變量表示該變量只能被賦值一次
修飾引用表示該引用只能一次指向?qū)ο蟮臋C會
finally
finally 是用于異常處理的場面,無論是否有異常拋出狰右,都會執(zhí)行
finalize
finalize是Object的方法杰捂,所有類都繼承了該方法。當(dāng)一個對象滿足垃圾回收的條件棋蚌,并且被回收的時候嫁佳,其finalize()方法就會被調(diào)用
示例 11 :
Overload和Override的區(qū)別脱拼,即重載和重寫的區(qū)別。 Overloaded的方法是否可以改變返回值的類型?
Overload是方法重載的意思,指的是在同一個類里面,方法名一樣愕提,但是參數(shù)不一樣
Override是方法重寫的意思证膨,指的是子類繼承了父類的某個方法后不见,重新又寫了一遍
Overloaded的方法是否可以改變返回值的類型?
可以刷晋,重載其實本質(zhì)上就是完全不同的方法,只是恰好取了相同的名字
示例 12 :
Error和Exception有什么區(qū)別? 請先登錄
Error和Exception都實現(xiàn)了Throwable接口
Error只的是JVM層面的錯誤,比如內(nèi)存不足OutOfMemoryError
Exception 只的是代碼邏輯的異常,比如下標(biāo)越界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: 棧 (在一些書籍里,會被翻譯為堆棧溯泣,實際上指的就是單純的這個棧)
存放的內(nèi)容不一樣:
heap: 是存放對象的
stack: 是存放基本類型(int, float, boolean 等等)虐秋、引用(對象地址)、方法調(diào)用
存去方式不一樣:
heap: 是自動增加大小的垃沦,所以不需要指定大小客给,但是存取相對較慢
stack: 是固定大小的,并且是FILO 先入后出的順序肢簿,并且存取速度比較快
示例 15 :
GC是什么? 為什么要有GC?
GC是Garbage Collection的縮寫靶剑,即垃圾回收
這里所謂的垃圾,指的是那些不再被使用的對象池充,JVM的垃圾回收機制使得開發(fā)人員從無聊桩引、容易犯錯的手動釋放內(nèi)存資源的過程中解放出來。
開發(fā)人員可以更加專注的進(jìn)行業(yè)務(wù)功能的開發(fā)收夸,而資源回收的工作交由更加專業(yè)的垃圾回收機制自動完成坑匠。
示例 16 :
short s1 = 1; s1 = s1 + 1;有什么錯?
short s1 = 1; 這一句沒有錯誤,編譯器會自動把1這個整數(shù)處理為short.
s1 = s1 + 1; 右側(cè)的表達(dá)式會返回一個Int類型的整數(shù)卧惜,再把這個int類型的整數(shù)賦給short類型的s1的時候厘灼,就會出現(xiàn)強制轉(zhuǎ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");
首先構(gòu)造方法 new String("xyz"); 中的"xyz" 這本身就是一個字符串對象
然后 new 關(guān)鍵字一定會創(chuàng)建一個對象
所以總共創(chuàng)建了兩個String對象
示例 19 :
Java有沒有g(shù)oto?
有,goto是關(guān)鍵字夹纫,但是是保留字,并不具備功能性
示例 20 :
接口是否可繼承接口? 抽象類是否可實現(xiàn)(implements)接口? 抽象類是否可繼承實體類(concrete class)设凹?
接口是否可繼承接口?
可以舰讹,比如List 就繼承了接口Collection
抽象類是否可實現(xiàn)(implements)接口?
可以,比如MouseAdapter鼠標(biāo)監(jiān)聽適配器是一個抽象類闪朱,并且實現(xiàn)了MouseListener接口
抽象類是否可繼承實體類(concrete class)月匣?
可以,所有抽象類监透,都繼承了Object
示例 21 :
List, Set, Map是否繼承自Collection接口?
List 和 Set 繼承了Collection接口
但是Map和Collection之間沒有繼承關(guān)系桶错,因為一個是鍵值對容器,一個是單值容器胀蛮,無法兼容
示例 22 :
abstract的method是否可同時是static,是否可同時是synchronized院刁?
abstract的method是否可同時是static,是否可同時是synchronized?
都不可以
示例 23 :
數(shù)組有沒有l(wèi)ength()這個方法? String有沒有l(wèi)ength()這個方法粪狼?
數(shù)組獲取長度的手段是 .length 屬性
String獲取長度的手段是 length()方法
集合獲取長度的手段是 size()方法
文件獲取長度的手段是 length()方法
示例 24 :
Set里的元素是不能重復(fù)的退腥,那么用什么方法來區(qū)分重復(fù)與否呢?
以HashSet為例,判斷重復(fù)的邏輯是:
1. 首先看hashcode是否相同再榄,如果不同狡刘,就是不重復(fù)的
2. 如果hashcode一樣,再比較equals困鸥,如果不同嗅蔬,就是不重復(fù)的,否則就是重復(fù)的疾就。
更多關(guān)于hashcode的原理澜术,參考Java HashCode原理詳解
示例 25 :
構(gòu)造器Constructor是否可被override?是否可以繼承String類?
子類不能繼承父類的構(gòu)造方法,所以就不存在重寫父類的構(gòu)造方法猬腰。
String是final修飾的鸟废,所以不能夠被繼承
學(xué)習(xí)Java的同學(xué)注意了!9煤伞盒延!
學(xué)習(xí)過程中遇到什么問題或者想獲取學(xué)習(xí)資源的話,歡迎加入Java學(xué)習(xí)交流群346942462鼠冕,我們一起學(xué)Java添寺!