Java必問經(jīng)典面試試題
在學(xué)習(xí)、工作中,許多人都需要跟試題打交道,試題有助于被考核者了解自己的真實(shí)水平。什么樣的試題才是科學(xué)規(guī)范的試題呢?以下是小編為大家收集的Java必問經(jīng)典面試試題,僅供參考,大家一起來看看吧。
一、java中==和equals()的區(qū)別?
簡(jiǎn)單來說==適合應(yīng)用于基本數(shù)據(jù)類型的比較,而重寫后equals()方法適合應(yīng)用于引用類型的比較。原因在于基本類型變量直接存儲(chǔ)的是值本身,而引用類型變量存儲(chǔ)的是對(duì)象的引用,當(dāng)引用相同時(shí),用==比較,自然會(huì)是true,當(dāng)引用不同時(shí),用==比較,則會(huì)是false。equlals方法是object中的方法,對(duì)于所有繼承于object的類都會(huì)有該方法,當(dāng)使用equals方法是需對(duì)此方法進(jìn)行重寫,如果沒有對(duì)equals方法重寫,則比較的是引用類型的,變量所指向的對(duì)象的地址,沒有重寫的equals,和==效果相同,只有重寫了equals,比較的才會(huì)是所指對(duì)象的內(nèi)容。
二、java中String、StringBuild、StringBuffer的.區(qū)別?
String是不可變類,因此對(duì)String進(jìn)行操作都會(huì)產(chǎn)生新的String對(duì)象,容易導(dǎo)致效率低下,浪費(fèi)內(nèi)存空間。因此,為了應(yīng)對(duì)經(jīng)常性的字符串操作,引入了StringBuffer、StringBuild這種字符串變量。StringBufffer和StringBuild最大的區(qū)別,就是StringBuffer線程安全,但效率低,而StringBuild線程不安全,但效率高,且此兩者只能通過構(gòu)造函數(shù)的方式初始化。而String可以通過構(gòu)造函數(shù)和字面量復(fù)制兩種方式。
三、java中重載(overload、重寫(override)的區(qū)別?
1)重載是通過不同的方法參數(shù)來區(qū)分的,例如不同的參數(shù)個(gè)數(shù)、不同的參數(shù)類型、或者不同的參數(shù)順序。不能通過方法的訪問權(quán)限、返回值類型、和拋出異常類型類進(jìn)行重載。2)覆蓋是指子類函數(shù)覆蓋父類函數(shù),覆蓋一個(gè)方法,并對(duì)其重寫。重寫需要注意,子類必須與父類中,被重寫的方法有相同的函數(shù)名、相同的參數(shù)、相同的返回值、以及拋出異常也必須保持一致。
四、java中接口和抽象類的區(qū)別?
1、抽象類和接口都不能直接實(shí)例化
2、抽象類要被子類繼承(extends),接口要被類實(shí)現(xiàn)(implements)
3、接口只能做方法的聲明,且所有方法訪問權(quán)限必須是public,抽象類中可以做方法聲明,也可以做方法的實(shí)現(xiàn)。
4、接口中定義的變量只能是公共的靜態(tài)常量,抽象類中的變量可以是普通變量。
5、抽象類里的抽象方法必須全部被子類所實(shí)現(xiàn),如果子類不能全部實(shí)現(xiàn)父類的抽象方法,那么該子類只能是抽象類。同理如果在實(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、接口可以繼承接口,并可多繼承接口,但類只能單根繼承。