Java基礎知識點面試專題

1寓免、java中==和equals和hashCode的區(qū)別

1)==若是基本數(shù)據(jù)類型比較胸梆,是比較值,若是引用類型扫责,則比較的是他們在內(nèi)存中的存放地址榛鼎。對象是存放在堆中,棧中存放的對象的引用鳖孤,所以==是對棧中的值進行比較者娱,若返回true代表變量的內(nèi)存地址相等;

2)equals是Object類中的方法苏揣,Object類的equals方法用于判斷對象的內(nèi)存地址引用是不是同一個地址(是不是同一個對象)黄鳍。若是類中覆蓋了equals方法,就要根據(jù)具體代碼來確定平匈,一般覆蓋后都是通過對象的內(nèi)容是否相等來判斷對象是否相等框沟。

3)hashCode()計算出對象實例的哈希碼,在對象進行散列時作為key存入增炭。之所以有hashCode方法忍燥,因為在批量的對象比較中,hashCode比較要比equals快隙姿。在添加新元素時梅垄,先調(diào)用這個元素的hashCode方法,一下子能定位到它應該旋轉(zhuǎn)的物理位置输玷,若該位置沒有元素队丝,可直接存儲;若該位置有元素饲嗽,就調(diào)用它的equals方法與新元素進行比較炭玫,若相同則不存,不相同貌虾,就放到該位置的鏈表末端吞加。

4)equals與hashCode方法關系:

hashCode()是一個本地方法,實現(xiàn)是根據(jù)本地機器上關的。equals()相等的對象衔憨,hashCode()也一定相等叶圃;hashCode()不等,equals()一定也不等践图;hashCode()相等掺冠,equals()可能相等,也可能不等码党。

所以在重寫equals(Object obj)方法德崭,有必要重寫hashCode()方法,確保通過equals(Object obj)方法判斷結(jié)果為true的兩個對象具備相等的hashCode()返回值揖盘。

5)equals與==的關系:

Integer b1 = 127;在java編譯時被編譯成Integer b1 = Integer.valueOf(127);對于-128到127之間的Integer值眉厨,用的是原生數(shù)據(jù)類型int,會在內(nèi)存里供重用兽狭,也就是這之間的Integer值進行==比較時憾股,只是進行int原生數(shù)據(jù)類型的數(shù)值進行比較。而超出-128?127的范圍箕慧,進行==比較時是進行地址及數(shù)值比較服球。

2、int颠焦、char斩熊、long各占多少字節(jié)數(shù)

int\float占用4個字節(jié),short\char占用2個字節(jié)伐庭,long占用8個字節(jié)座享,byte/boolean占用1個字節(jié)

基本數(shù)據(jù)類型存放在棧里,包裝類棧里存放的是對象的引用似忧,即值的地址,而值存放在堆里丈秩。

3盯捌、int與integer的區(qū)別

Integer是int的包裝類,int則是java的一種基本數(shù)據(jù)類型蘑秽,Integer變量必須實例化才能使用饺著,當new一個Integer時,實際是生成一個指向此對象的引用肠牲,而int是直接存儲數(shù)據(jù)的值幼衰,Integer默認值是null,而int默認值是0

4缀雳、談談對java多態(tài)的理解

同一個消息可以根據(jù)發(fā)送對象的不同而采用多種不同的行為方式渡嚣,在執(zhí)行期間判斷所引用的對象的實際類型,根據(jù)其實際的類型調(diào)用其相應的方法。

作用:消除類型之間的耦合關系识椰。實現(xiàn)多態(tài)的必要條件:繼承绝葡、重寫(因為必須調(diào)用父類中存在的方法)、父類引用指向子類對象

5腹鹉、String藏畅、StringBuffer、StringBuilder區(qū)別

都是字符串類功咒,String類中使用字符數(shù)組保存字符串愉阎,因有final修飾符,String對象是不可變的力奋,每次對String操作都會生成新的String對象榜旦,這樣效率低,且浪費內(nèi)存空間刊侯。但線程安全章办。

StringBuilder和StringBuffer也是使用字符數(shù)組保存字符,但這兩種對象都是可變的滨彻,即對字符串進行append操作藕届,不會產(chǎn)生新的對象。它們的區(qū)別是:StringBuffer對方法加了同步鎖亭饵,是線程安全的休偶,StringBuilder非線程安全。

6辜羊、什么是內(nèi)部類踏兜?內(nèi)部類的作用

內(nèi)部類指在類的內(nèi)部再定義另一個類。

內(nèi)部類的作用:1)實現(xiàn)多重繼承八秃,因為java中類的繼承只能單繼承碱妆,使用內(nèi)部類可達到多重繼承;2)內(nèi)部類可以很好的實現(xiàn)隱藏昔驱,一般非內(nèi)部類疹尾,不允許有private或protected權(quán)限的,但內(nèi)部類可以骤肛;3)減少了類文件編譯后產(chǎn)生的字節(jié)碼文件大心杀尽;

內(nèi)部類在編譯完后也會產(chǎn)生.class文件腋颠,但文件名稱是:外部類名稱$內(nèi)部類名稱.class繁成。分為以下幾種:

1)成員內(nèi)部類,作為外部類的一個成員存在淑玫,與外部類的屬性巾腕、方法并列面睛,成員內(nèi)部類持有外部類的引用,成員內(nèi)部類不能定義static變量和方法祠墅。應用場合:每一個外部類都需要一個內(nèi)部類實例侮穿,內(nèi)部類離不開外部類存在。

2)靜態(tài)內(nèi)部類毁嗦,內(nèi)部類以static聲明亲茅,其他類可通過外部類.內(nèi)部類來訪問。特點:不會持有外部類的引用狗准,可以訪問外部類的靜態(tài)變量克锣,若要訪問成員變量須通過外部類的實例訪問。應用場合:內(nèi)部類不需要外部類的實例腔长,僅為外部類提供或邏輯上屬于外部類袭祟,邏輯上可單獨存在。設計的意義:加強了類的封裝性(靜態(tài)內(nèi)部類是外部類的子行為或子屬性捞附,兩者保持著一定關系)巾乳,提高了代碼的可讀性(相關聯(lián)的代碼放在一起)。

3)匿名內(nèi)部類鸟召,在整個操作中只使用一次胆绊,沒有名字,使用new創(chuàng)建欧募,沒有具體位置压状。

4)局部內(nèi)部類,在方法內(nèi)或是代碼塊中定義類跟继,

7种冬、抽象類和接口區(qū)別

抽象類在類前面須用abstract關鍵字修飾,一般至少包含一個抽象方法舔糖,抽象方法指只有聲明娱两,用關鍵字abstract修飾,沒有具體的實現(xiàn)的方法金吗。因抽象類中含有無具體實現(xiàn)的方法谷婆,固不能用抽象類創(chuàng)建對象。當然如果只是用abstract修飾類而無具體實現(xiàn)辽聊,也是抽象類。抽象類也可以有成員變量和普通的成員方法期贫。抽象方法必須為public或protected(若為private跟匆,不能被子類繼承,子類無法實現(xiàn)該方法)通砍。若一個類繼承一個抽象類玛臂,則必須實現(xiàn)父類中所有的抽象方法烤蜕,若子類沒有實現(xiàn)父類的抽象方法,則也應該定義為抽象類迹冤。

接口用關鍵字interface修飾讽营,接口也可以含有變量和方法,接口中的變量會被隱式指定為public static final變量泡徙。方法會被隱式的指定為public abstract橱鹏,接口中的所有方法均不能有具體的實現(xiàn),即接口中的方法都必須為抽象方法堪藐。若一個非抽象類實現(xiàn)某個接口莉兰,必須實現(xiàn)該接口中所有的方法。

區(qū)別:

1)抽象類可以提供成員方法實現(xiàn)的細節(jié)礁竞,而接口只能存在抽象方法糖荒;

2)抽象類的成員變量可以是各種類型,而接口中成員變量只能是public static final類型模捂;

3)接口中不能含有靜態(tài)方法及靜態(tài)代碼塊捶朵,而抽象類可以有靜態(tài)方法和靜態(tài)代碼塊;

4)一個類只能繼承一個抽象類狂男,用extends來繼承撮奏,卻可以實現(xiàn)多個接口硫豆,用implements來實現(xiàn)接口。

7.1、抽象類的意義

抽象類是用來提供子類的通用性尊浓,用來創(chuàng)建繼承層級里子類的模板,減少代碼編寫吓揪,有利于代碼規(guī)范化包帚。

7.2、抽象類與接口的應用場景

抽象類的應用場景:1)規(guī)范了一組公共的方法兔毙,與狀態(tài)無關唾琼,可以共享的,無需子類分別實現(xiàn)澎剥;而另一些方法卻需要各個子類根據(jù)自己特定狀態(tài)來實現(xiàn)特定功能锡溯;

2)定義一組接口,但不強迫每個實現(xiàn)類都必須實現(xiàn)所有的方法哑姚,可用抽象類定義一組方法體可以是空方法體祭饭,由子類選擇自己感興趣的方法來覆蓋;

7.3****叙量、抽象類是否可以沒有方法和屬性倡蝙?

可以

7.4、接口的意義

1)有利于代碼的規(guī)范绞佩,對于大型項目寺鸥,對一些接口進行定義猪钮,可以給開發(fā)人員一個清晰的指示,防止開發(fā)人員隨意命名和代碼混亂胆建,影響開發(fā)效率烤低。

2)有利于代碼維護和擴展,當前類不能滿足要求時笆载,不需要重新設計類扑馁,只需要重新寫了個類實現(xiàn)對應的方法。

3)解耦作用宰译,全局變量的定義檐蚜,當發(fā)生需求變化時,只需改變接口中的值即可沿侈。

4)直接看接口闯第,就可以清楚知道具體實現(xiàn)類間的關系,代碼交給別人看缀拭,別人也能立馬明白咳短。

8、泛型中extends和super的區(qū)別

<? extends T>限定參數(shù)類型的上界蛛淋,參數(shù)類型必須是T或T的子類型咙好,但對于List<? extends T>,不能通過add()來加入元素褐荷,因為不知道<? extends T>是T的哪一種子類勾效;

<? super T>限定參數(shù)類型的下界,參數(shù)類型必須是T或T的父類型叛甫,不能能過get()獲取元素层宫,因為不知道哪個超類;

9其监、父類的靜態(tài)方法能否被子類重寫萌腿?靜態(tài)屬性和靜態(tài)方法是否可以被繼承?

父類的靜態(tài)方法和屬性不能被子類重寫抖苦,但子類可以繼承父類靜態(tài)方法和屬性毁菱,如父類和子類都有同名同參同返回值的靜態(tài)方法show(),聲明的實例Father father = new Son(); (Son extends Father)锌历,會調(diào)用father對象的靜態(tài)方法贮庞。靜態(tài)是指在編譯時就會分配內(nèi)存且一直存在,跟對象實例無關究西。

10窗慎、進程和線程的區(qū)別

進程:具有一定獨立功能的程序,是系統(tǒng)進行資源分配和調(diào)度運行的基本單位怔揩。

線程:進程的一個實體捉邢,是CPU調(diào)度的苯單位,也是進程中執(zhí)行運算的最小單位商膊,即執(zhí)行處理機調(diào)度的基本單位伏伐,如果把進程理解為邏輯上操作系統(tǒng)所完成的任務,線程則表示完成該任務的許多可能的子任務之一晕拆。

關系:一個進程可有多個線程藐翎,至少一個;一個線程只能屬于一個進程实幕。同一進程的所有線程共享該進程的所有資源吝镣。不同進程的線程間要利用消息通信方式實現(xiàn)同步。

區(qū)別:進程有獨立的地址空間昆庇,而多個線程共享內(nèi)存末贾;進程具有一個獨立功能的程序,線程不能獨立運行整吆,必須依存于應用程序中拱撵;

11、final表蝙,finally拴测,finalize的區(qū)別

final:變量、類府蛇、方法的修飾符集索,被final修飾的類不能被繼承,變量或方法被final修飾則不能被修改和重寫汇跨。

finally:異常處理時提供finally塊來執(zhí)行清除操作务荆,不管有沒有異常拋出,此處代碼都會被執(zhí)行扰法。如果try語句塊中包含return語句蛹含,finally語句塊是在return之后運行;

finalize:Object類中定義的方法塞颁,若子類覆蓋了finalize()方法浦箱,在在垃圾收集器將對象從內(nèi)存中清除前,會執(zhí)行該方法祠锣,確定對象是否會被回收酷窥。

12、序列化Serializable 和Parcelable 的區(qū)別

序列化:將一個對象轉(zhuǎn)換成可存儲或可傳輸?shù)臓顟B(tài)伴网,序列化后的對象可以在網(wǎng)絡上傳輸蓬推,也可以存儲到本地,或?qū)崿F(xiàn)跨進程傳輸澡腾;

為什么要進行序列化:開發(fā)過程中沸伏,我們需要將對象的引用傳給其他activity或fragment使用時糕珊,需要將這些對象放到一個Intent或Bundle中,再進行傳遞毅糟,而Intent或Bundle只能識別基本數(shù)據(jù)類型和被序列化的類型红选。

Serializable:表示將一個對象轉(zhuǎn)換成可存儲或可傳輸?shù)臓顟B(tài)。

Parcelable:與Serializable實現(xiàn)的效果相同姆另,也是將一個對象轉(zhuǎn)換成可傳輸?shù)臓顟B(tài)喇肋,但它的實現(xiàn)原理是將一個完整的對象進行分解,分解后的每一部分都是Intent所支持的數(shù)據(jù)類型迹辐,這樣實現(xiàn)傳遞對象的功能蝶防。

Parcelable****實現(xiàn)序列化的重要方法:序列化功能是由writeToParcel完成,通過Parcel中的write方法來完成明吩;反序列化由CREATOR完成间学,內(nèi)部標明了如何創(chuàng)建序列化對象及數(shù)級,通過Parcel的read方法完成贺喝;內(nèi)容描述功能由describeContents方法完成菱鸥,一般直接返回0。

區(qū)別:Serializable在序列化時會產(chǎn)生大量臨時變量躏鱼,引起頻繁GC氮采。Serializable本質(zhì)上使用了反射,序列化過程慢染苛。Parcelable不能將數(shù)據(jù)存儲在磁盤上鹊漠,在外界變化時,它不能很好的保證數(shù)據(jù)的持續(xù)性茶行。

選擇原則:若僅在內(nèi)存中使用躯概,如activity\service間傳遞對象,優(yōu)先使用Parcelable畔师,它性能高娶靡。若是持久化操作,優(yōu)先使用Serializable

注意:靜態(tài)成員變量屬于類看锉,不屬于對象姿锭,固不會參與序列化的過程;用transient關鍵字編輯的成員變量不會參與序列化過程伯铣;可以通過重寫writeObject()和readObject()方法來重寫系統(tǒng)默認的序列化和反序列化呻此。

13、談談對kotlin的理解

特點:1)代碼量少且代碼末尾沒有分號腔寡;2)空類型安全(編譯期處理了各種null情況焚鲜,避免執(zhí)行時異常);3)函數(shù)式的,可使用lambda表達式忿磅;4)可擴展方法(可擴展任意類的的屬性)糯彬;5)互操作性強,可以在一個項目中使用kotlin和java兩種語言混合開發(fā)葱她;

14情连、string 轉(zhuǎn)換成 integer的方式及原理

1)parseInt(String s)內(nèi)部調(diào)用parseInt(s, 10)默認為10進制 。

2)正常判斷null\進制范圍览效,length等。

3)判斷第一個字符是否是符號位虫几。

4)循環(huán)遍歷確定每個字符的十進制值锤灿。

5)通過*=和-=進行計算拼接。

6)判斷是否為負值返回結(jié)果辆脸。

謝謝你的閱讀但校,如果您覺得這篇博文對你有幫助,請點贊或者喜歡啡氢,讓更多的人看到状囱!祝你每天開心愉快!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末倘是,一起剝皮案震驚了整個濱河市亭枷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌搀崭,老刑警劉巖叨粘,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異瘤睹,居然都是意外死亡升敲,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門轰传,熙熙樓的掌柜王于貴愁眉苦臉地迎上來驴党,“玉大人,你說我怎么就攤上這事获茬「圩” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵锦茁,是天一觀的道長攘轩。 經(jīng)常有香客問我,道長码俩,這世上最難降的妖魔是什么度帮? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上笨篷,老公的妹妹穿的比我還像新娘瞳秽。我一直安慰自己,他們只是感情好率翅,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布练俐。 她就那樣靜靜地躺著,像睡著了一般冕臭。 火紅的嫁衣襯著肌膚如雪腺晾。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天辜贵,我揣著相機與錄音悯蝉,去河邊找鬼。 笑死托慨,一個胖子當著我的面吹牛鼻由,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播厚棵,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蕉世,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了婆硬?” 一聲冷哼從身側(cè)響起狠轻,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎彬犯,沒想到半個月后哈误,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡躏嚎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年蜜自,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片卢佣。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡重荠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出虚茶,到底是詐尸還是另有隱情戈鲁,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布嘹叫,位于F島的核電站婆殿,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏罩扇。R本人自食惡果不足惜婆芦,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一怕磨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧消约,春花似錦肠鲫、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至氯材,卻和暖如春渣锦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背氢哮。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工泡挺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人命浴。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像贱除,于是被迫代替她去往敵國和親生闲。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1.java中==和equals和hashCode的區(qū)別 1)==若是基本數(shù)據(jù)類型比較月幌,是比較值碍讯,若是引用類型,則...
    Fitz_e74a閱讀 4,464評論 1 1
  • 注:都是在百度搜索整理的答案扯躺,如有侵權(quán)和錯誤捉兴,希告知更改。 一录语、java中==和equals和hashCode的區(qū)...
    Jenchar閱讀 580評論 1 2
  • java基礎 集合承繼包含圖 Collection vs Collections 首先倍啥,"Collection" ...
    onlyHalfSoul閱讀 1,318評論 0 5
  • 1.import static是Java 5增加的功能,就是將Import類中的靜態(tài)方法,可以作為本類的靜態(tài)方法來...
    XLsn0w閱讀 1,222評論 0 2
  • 面向?qū)ο笾饕槍γ嫦蜻^程澎埠。 面向過程的基本單元是函數(shù)虽缕。 什么是對象:EVERYTHING IS OBJECT(萬物...
    sinpi閱讀 1,054評論 0 4