一、int和Integer的區(qū)別
(相關(guān)教程推薦:java面試題)
1、Integer是int的包裝類,int則是java的一種基本數(shù)據(jù)類型
2、Integer變量必須實(shí)例化后才能使用,而int變量不需要
3、Integer實(shí)際是對(duì)象的引用,當(dāng)new一個(gè)Integer時(shí),實(shí)際上是生成一個(gè)指針指向此對(duì)象;而int則是直接存儲(chǔ)數(shù)據(jù)值
4、Integer的默認(rèn)值是null,int的默認(rèn)值是0
二、什么是for each循環(huán),它可以循環(huán)那些數(shù)據(jù)類型?
增強(qiáng)版的for循環(huán),寫法更簡(jiǎn)潔,更加不容易出錯(cuò)(因?yàn)椴挥脫?dān)心數(shù)組越界),底層也是使用了迭代器獲取的,只不過獲取迭代器由jvm完成,不需要我們獲取迭代器而已,所以在使用foreach循環(huán)變量元素的過程中不準(zhǔn)使用集合對(duì)象對(duì)集合的元素個(gè)數(shù)進(jìn)行修改。
寫法:
for(String it : set){ System.out.println("集合的元素:" + it); }
缺點(diǎn):
在對(duì)數(shù)組索引進(jìn)行操作或者集合進(jìn)行增刪操作時(shí),可能會(huì)報(bào)錯(cuò)。
(推薦學(xué)習(xí):java入門程序)
三、重載與重寫有什么區(qū)別?
1、方法重載
是讓類以統(tǒng)一的方式處理不同類型數(shù)據(jù)的一種手段。多個(gè)同名函數(shù)同時(shí)存在,具有不同的參數(shù)個(gè)數(shù)/類型。重載Overloading是一個(gè)類中多態(tài)性的一種表現(xiàn)。
Java的方法重載,就是在類中可以創(chuàng)建多個(gè)方法,它們具有相同的名字,但具有不同的參數(shù)和不同的定義。
調(diào)用方法時(shí)通過傳遞給它們的不同參數(shù)個(gè)數(shù)和參數(shù)類型來決定具體使用哪個(gè)方法, 這就是多態(tài)性。
重載的時(shí)候,方法名要一樣,但是參數(shù)類型和個(gè)數(shù)不一樣,返回值類型可以相同也可以不相同。無法以返回值類型作為重載函數(shù)的區(qū)分標(biāo)準(zhǔn)。
2、方法重寫
參數(shù)列表必須完全與被重寫的方法相同,否則不能稱其為重寫而是重載。
返回的類型必須一直與被重寫的方法的返回類型相同,否則不能稱其為重寫而是重載。
訪問修飾符的限制一定要大于被重寫方法的訪問修飾符(public>protected>default>private)
重寫方法一定不能拋出新的檢查異?;蛘弑缺恢貙懛椒ㄉ昝鞲訉挿旱臋z查型異常。例如:父類的一個(gè)方法申明了一個(gè)檢查異常IOException,在重寫這個(gè)方法是就不能拋出Exception,只能拋出IOException的子類異常,可以拋出非檢查異常。
注意:構(gòu)造器不能被繼承,因此不能被重寫,但可以被重載。
四、接口與抽象類的區(qū)別?
1、抽象類和接口都不能直接實(shí)例化,如果要實(shí)例化,抽象類變量必須指向?qū)崿F(xiàn)所有抽象方法的子類對(duì)象,接口變量必須指向?qū)崿F(xiàn)所有接口方法的類對(duì)象。
2、抽象類要被子類繼承,接口要被類實(shí)現(xiàn)。
3、接口只能做方法申明,抽象類中可以做方法申明,也可以做方法實(shí)現(xiàn)
4、接口里定義的變量只能是公共的靜態(tài)的常量,抽象類中的變量是普通變量。
5、抽象類里的抽象方法必須全部被子類所實(shí)現(xiàn),如果子類不能全部實(shí)現(xiàn)父類抽象方法,那么該子類只能是抽象類。同樣,一個(gè)實(shí)現(xiàn)接口的時(shí)候,如不能全部實(shí)現(xiàn)接口方法,那么該類也只能為抽象類。
6、抽象方法只能申明,不能實(shí)現(xiàn),接口是設(shè)計(jì)的結(jié)果 ,抽象類是重構(gòu)的結(jié)果
7、抽象類里可以沒有抽象方法
8、如果一個(gè)類里有抽象方法,那么這個(gè)類只能是抽象類
9、抽象方法要被實(shí)現(xiàn),所以不能是靜態(tài)的,也不能是私有的。
10、接口可繼承接口,并可多繼承接口,但類只能單根繼承。
不允許類多重繼承的主要原因是,如果A同時(shí)繼承B和C,而b和c同時(shí)有一個(gè)D方法,A如何決定該繼承那一個(gè)呢?
但接口不存在這樣的問題,接口全都是抽象方法繼承誰都無所謂,所以接口可以繼承多個(gè)接口。
(視頻教程推薦:java視頻教程)
五、final, finally, finalize 的區(qū)別
final:java中的關(guān)鍵字,修飾符。
A)、如果一個(gè)類被聲明為final,就意味著它不能再派生出新的子類,不能作為父類被繼承。因此,一個(gè)類不能同時(shí)被聲明為abstract抽象類的和final的類。
B)、如果將變量或者方法聲明為final,可以保證它們?cè)谑褂弥胁槐桓淖儭?/p>
(1)被聲明為final的變量必須在聲明時(shí)給定初值,而在以后的引用中只能讀取,不可修改。
(2)被聲明final的方法只能使用,不能重載。
finally:java的一種異常處理機(jī)制。
finally是對(duì)Java異常處理模型的最佳補(bǔ)充。finally結(jié)構(gòu)使代碼總會(huì)執(zhí)行,而不管無異常發(fā)生。使用finally可以維護(hù)對(duì)象的內(nèi)部狀態(tài),并可以清理非內(nèi)存資源。特別是在關(guān)閉數(shù)據(jù)庫(kù)連接這方面,如果程序員把數(shù)據(jù)庫(kù)連接的close()方法放到finally中,就會(huì)大大降低程序出錯(cuò)的幾率。
finalize,它是一個(gè)方法,屬于java.lang.Object類,它的定義如下:
protected void finalize()throws Throwable{}
眾所周知,finalize()方法是GC(garbagecollector運(yùn)行機(jī)制的一部分,在此我們只說說finalize()方法的作用是什么呢?
finalize()方法是在GC清理它所從屬的對(duì)象時(shí)被調(diào)用的,如果執(zhí)行它的過程中拋出了無法捕獲的異常(uncaughtexception,GC將終止對(duì)改對(duì)象的清理,并且該異常會(huì)被忽略;直到下一次GC開始清理這個(gè)對(duì)象時(shí),它的finalize()會(huì)被再次調(diào)用。