JAVA基礎(chǔ)面試題(二)

1.Java中的異常處理機(jī)制的簡(jiǎn)單原理和應(yīng)用崭孤?

? ? ? ? 異常是指Java程序運(yùn)行時(shí)(非編譯)所發(fā)生的非正常情況或錯(cuò)誤惜姐,與現(xiàn)實(shí)生活中的事件很相似沛膳,現(xiàn)實(shí)生活中的事件可以包含事件發(fā)生的時(shí)間褐鸥,地點(diǎn)腰鬼,人物蝶棋,情節(jié)等信息卸亮,可以用一個(gè)對(duì)象來(lái)表示,Java使用面向?qū)ο蟮姆绞絹?lái)處理異常玩裙,它把程序中發(fā)生的每一個(gè)異常也都分別封裝到一個(gè)對(duì)象來(lái)表示的兼贸,該對(duì)象中包含有異常的信息。Java.lang.throwable吃溅,throwable下面又派生出兩個(gè)子類:error和exception溶诞。

? ? error表示應(yīng)用程序本身無(wú)法克服和恢復(fù)的一種嚴(yán)重問(wèn)題,程序只有死的份了决侈,例如螺垢,內(nèi)存溢出和線程死鎖等系統(tǒng)問(wèn)題。

? ? ?exception表示程序還能夠克服和恢復(fù)的問(wèn)題赖歌,其中又分為系統(tǒng)異常和普通異常枉圃,系統(tǒng)異常是軟件是軟件本身缺陷所致的問(wèn)題,也就是軟件開發(fā)人員考慮不周所致的問(wèn)題庐冯,軟件使用者無(wú)法克服和恢復(fù)這種問(wèn)題孽亲,但在這種問(wèn)題下還可以讓軟件系統(tǒng)繼續(xù)運(yùn)行或者讓軟件死掉,例如肄扎,數(shù)組腳本越界(arrayindexoutofboundsexception),空指針異常(nullpointrexception)墨林,類型轉(zhuǎn)換異常(classcastexception);普通異常是運(yùn)行環(huán)境的變化或異常所導(dǎo)致的問(wèn)題,是用戶能夠克服的問(wèn)題犯祠,例如旭等,網(wǎng)絡(luò)斷線,硬盤空間不夠衡载,發(fā)生這樣的異常后搔耕,程序不應(yīng)該死掉。

Java為系統(tǒng)異常和普通異常提供了不同的解決方案痰娱,編譯器強(qiáng)制普通異常必須try.......catch處理或用throws聲明繼續(xù)拋給上層調(diào)用方法處理弃榨,所以普通異常也稱為checked異常,而系統(tǒng)異常也可以處理梨睁,也可以不處理鲸睛,所以編譯器不強(qiáng)制用try....catch處理或用throws聲明,所以系統(tǒng)異常也稱為unchecked異常坡贺。

注:出現(xiàn)系統(tǒng)異常后官辈,系統(tǒng)會(huì)把異常一直往上層拋箱舞,一直遇到處理代碼,如果沒(méi)有遇到處理到最上層拳亿,如果是多線程就由thread.run()拋出晴股,如果是單線程就被main()拋出。若是線程肺魁,線程結(jié)束电湘,若是主程序,程序退出鹅经。

2.最常見的運(yùn)行異常寂呛?

arrayindexoutofboundsexception? ? ?數(shù)組腳本越界? ? ? ? ? ? ? ? ? ? ? ? ? ??nullpointrexception? ? ? ?空指針異常

classcastexception? ? ? ? ? ? ? ? ? ? ? ? ? ?類型轉(zhuǎn)換異常? ? ? ? ? ? ? ? ? ? ? ? ? ? arithmeticexception? ? ? ? 算術(shù)條件異常

classnotfoundexception? ? ? ? ? ? ? ? ? ? ?指定的類不存在

3.Java語(yǔ)言如何進(jìn)行異常處理,關(guān)鍵字:throws,throw,try,catch,finally分別代表什么意義瞬雹?在try塊可以拋出異常嗎昧谊?

throws是獲取并向外拋出異常

throw是拋出異常

try是將會(huì)發(fā)生異常的語(yǔ)句括起來(lái)刽虹,從而進(jìn)行異常的處理酗捌,

catch是如果有異常就會(huì)執(zhí)行他里面的語(yǔ)句,

try...catch是內(nèi)部捕獲異常并做自定義處理

而finally不論是否有異常都會(huì)進(jìn)行執(zhí)行的語(yǔ)句涌哲。

*? 如果要捕捉throw拋出的異常胖缤,則必須使用try—catch語(yǔ)句》Щ可見哪廓,throw可以主動(dòng)拋出異常,也就是可以在try中拋出異常

throw和throws的詳細(xì)區(qū)別如下:

throw是語(yǔ)句拋出一個(gè)異常初烘。

語(yǔ)法:throw (異常對(duì)象);

throw e;

throws是方法可能拋出異常的聲明涡真。(用在聲明方法時(shí),表示該方法可能要拋出異常)

語(yǔ)法:[(修飾符)](返回值類型)(方法名)([參數(shù)列表])[throws(異常類)]{......}

public void doA(int a) throws Exception1,Exception3{......}

1. 區(qū)別


throws是用來(lái)聲明一個(gè)方法可能拋出的所有異常信息肾筐,而throw則是指拋出的一個(gè)具體的異常類型哆料。此外throws是將異常聲明但是不處理,而是將異常往上傳吗铐,誰(shuí)調(diào)用我就交給誰(shuí)處理东亦。

2.分別介紹

? throws:用于聲明異常,例如唬渗,如果一個(gè)方法里面不想有任何的異常處理典阵,則在沒(méi)有任何代碼進(jìn)行異常處理的時(shí)候,必須對(duì)這個(gè)方法進(jìn)行聲明有可能產(chǎn)生的所有異常(其實(shí)就是镊逝,不想自己處理壮啊,那就交給別人吧,告訴別人我會(huì)出現(xiàn)什么異常撑蒜,報(bào)自己的錯(cuò)歹啼,讓別人處理去吧)充坑。

格式是:方法名(參數(shù))throws 異常類1,異常類2染突,.....

throw語(yǔ)句用在方法體內(nèi)捻爷,表示拋出異常,由方法體內(nèi)的語(yǔ)句處理份企。

throws語(yǔ)句用在方法聲明后面也榄,表示再拋出異常,由該方法的調(diào)用者來(lái)處理司志。


throws主要是聲明這個(gè)方法會(huì)拋出這種類型的異常甜紫,使它的調(diào)用者知道要捕獲這個(gè)異常。

throw是具體向外拋異常的動(dòng)作骂远,所以它是拋出一個(gè)異常實(shí)例囚霸。


throws說(shuō)明你有那個(gè)可能,傾向激才。

throw的話拓型,那就是你把那個(gè)傾向變成真實(shí)的了。


同時(shí):

a瘸恼、throws出現(xiàn)在方法函數(shù)頭劣挫;而throw出現(xiàn)在函數(shù)體。

b东帅、throws表示出現(xiàn)異常的一種可能性压固,并不一定會(huì)發(fā)生這些異常;throw則是拋出了異常靠闭,執(zhí)行throw則一定拋出了某種異常帐我。

c、兩者都是消極處理異常的方式(這里的消極并不是說(shuō)這種方式不好)愧膀,只是拋出或者可能拋出異常拦键,但是不會(huì)由函數(shù)去處理異常,真正的處理異常由函數(shù)的上層調(diào)用處理扇调。

4.sleep()和wait()有什么區(qū)別矿咕?

sleep就是正在執(zhí)行的線程主動(dòng)讓出cup,cpu去執(zhí)行其他線程狼钮,在sleep指定的時(shí)間后碳柱,cup才會(huì)回到這個(gè)線程上繼續(xù)往下執(zhí)行,如果當(dāng)前線程進(jìn)入了同步鎖熬芜,sleep方法并不會(huì)釋放鎖莲镣,即使當(dāng)前線程使用sleep方法讓出了cup,但其他被同步鎖擋住了的線程也無(wú)法得到執(zhí)行。wait是指在一個(gè)已經(jīng)進(jìn)入了同步鎖的線程內(nèi)涎拉,讓自己暫時(shí)讓出同步鎖瑞侮,以便其他正在等待此鎖的線程可以得到同步鎖并運(yùn)行的圆,只有其他線程調(diào)用了notify方法(notify并不釋放鎖,只是告訴調(diào)用過(guò)wait方法的線程可以參與獲得鎖的競(jìng)爭(zhēng)了半火,但不是馬上得到鎖越妈,因?yàn)殒i還在別人手中,別人還沒(méi)有釋放钮糖。如果notify方法后面的代碼還有很多梅掠,需要這些代碼執(zhí)行完后才會(huì)釋放鎖,可以在notify方法后增加一個(gè)等待和一些代碼店归,看效果)調(diào)用wait方法的線程就會(huì)解除wait狀態(tài)和程序可以再次得到鎖后繼續(xù)向下運(yùn)行阎抒。

5.多線程有幾種實(shí)現(xiàn)方法?同步有幾種實(shí)現(xiàn)方法消痛?

多線程有兩種實(shí)現(xiàn)方法且叁,分別是繼承thread類和實(shí)現(xiàn)runnable 接口

同步的實(shí)現(xiàn)方式有兩種synchronized,wait,與notify

wait():使一個(gè)線程處于等待狀態(tài),并且釋放所持有的對(duì)象的lock秩伞。

sleep():使一個(gè)正在運(yùn)行的線程處于睡眠狀態(tài)逞带,是一個(gè)靜態(tài)方法,調(diào)用此方法要捕捉InterruptedException(中斷異常)異常稠歉。

notify()掰担;喚醒一個(gè)處于等待狀態(tài)的線程汇陆,注意的是在調(diào)用此方法的時(shí)候怒炸,并不能確切的喚醒某一個(gè)等待狀態(tài)的線程,而是由jvm確定喚醒那個(gè)線程毡代,而不是按優(yōu)先級(jí)阅羹。

Allnotity():喚醒所有處于等待狀態(tài)的線程,注意并不是給所有喚醒線程一個(gè)對(duì)象的鎖教寂,而是讓他們競(jìng)爭(zhēng)捏鱼。

6.啟動(dòng)一個(gè)線程是用run()還是start()?

啟動(dòng)一個(gè)線程是調(diào)用start()方法酪耕,使線程就緒狀態(tài)导梆,以后可以被調(diào)度為運(yùn)行狀態(tài),一個(gè)線程必須關(guān)聯(lián)一些具體的執(zhí)行代碼迂烁,run()方法是該線程所關(guān)聯(lián)的執(zhí)行代碼

7.介紹collection框架的結(jié)構(gòu)看尼?

集合框架(Collection?Framework)泛指java.util包的若干個(gè)類和接口.如Collection,List,ArrayList,LinkedList,Vector(自動(dòng)增長(zhǎng)數(shù)組),HashSet,HashMap等.??

集合框架中的類主要封裝的是典型的數(shù)據(jù)結(jié)構(gòu),如動(dòng)態(tài)數(shù)組,鏈表,堆棧,集合,哈希表等.??

集合框架類似編程中經(jīng)常用到的工具類,使得編碼這專注于業(yè)務(wù)層的實(shí)現(xiàn),不需要從底層實(shí)現(xiàn)相關(guān)細(xì)節(jié)—“數(shù)據(jù)結(jié)構(gòu)的封裝”和”典型算法的實(shí)現(xiàn)”.??

Java.util.collection是一個(gè)集合接口。它提供了對(duì)集合對(duì)象進(jìn)行基本操作的通用接口方法盟步。collection接口在Java類庫(kù)中有很多具體的實(shí)現(xiàn)藏斩。collection 接口的意義是為各種具體的集合提供了最大化的統(tǒng)一操作方式。

8.collection和collections的區(qū)別却盘?

  Collection是集合類的上級(jí)接口狰域,繼承與他的接口主要有Set?和List.??

Collections是針對(duì)集合類的一個(gè)幫助類媳拴,它包含有各種有關(guān)集合操作的靜態(tài)多態(tài)方法,此類不能實(shí)例兆览,就像一個(gè)工具類屈溉,服務(wù)于Java的collection框架

9.collection框架中要實(shí)現(xiàn)什么接口?

Comparable/comparator

10.arraylist和vector的區(qū)別

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?list? ?(實(shí)現(xiàn))*有序可重復(fù)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? vector:線程安全但速度慢抬探,在jdk1.2后已經(jīng)被arraylist取代语婴,底層是數(shù)組結(jié)構(gòu),元素個(gè)數(shù)超過(guò)容量驶睦,增長(zhǎng)1倍

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? arraylist:線程不安全查詢速度快砰左,底層是數(shù)組結(jié)構(gòu)。元素個(gè)數(shù)超過(guò)容量场航,增長(zhǎng)0.5倍

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? linkedlist:線程不安全缠导,增刪數(shù)度快,底層是鏈表式結(jié)構(gòu)? ? ? ? ??

collection(繼承)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?set? ?(實(shí)現(xiàn))*無(wú)序不重復(fù)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? hashset:線程安全溉痢,存取速度快

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? treeset:線程不安全僻造,元素以二叉樹的形式排列

11.hashmap和hashtable的區(qū)別?

同:它們都實(shí)現(xiàn)了map接口

異:a.hashmap允許空(null)鍵值(key)孩饼,由于非線程安全髓削,在只有一個(gè)線程訪問(wèn)的情況下效率要高于hashtable;

? ? ? ? b.hashmap允許將null作為一個(gè)entry的key或者value镀娶,而hashtable不允許

? ? ? ? c.最大的不同是立膛,hashtable的方法是synchrionize的,而hashMap不是梯码,在多個(gè)線程訪問(wèn)hashtable時(shí)宝泵,不需要自己為它的方法實(shí)現(xiàn)同步,而

hashmap就必須為之提供外同步轩娶。

總結(jié):

歷史原因:hashtable是基于陳舊的dictionary 類的儿奶,hashmap是Java1.2引進(jìn)的map接口的一個(gè)實(shí)現(xiàn)。

同步性:hashtable是線程安全的鳄抒,也就是說(shuō)是同步的闯捎,而hashmap是線程不安全的,不是同步的三值许溅;只有hashmap可以讓你將空值作為一個(gè)表的key或alue



Map(實(shí)現(xiàn))

hashtable:線程安全瓤鼻,鏈表結(jié)構(gòu),查找慢闹司,增刪快娱仔。且key與value不能為null,

hashmap:線程不安全游桩,數(shù)組結(jié)構(gòu)牲迫,查找塊耐朴,增刪慢。允許將null作為一個(gè)entry的key或者value

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末盹憎,一起剝皮案震驚了整個(gè)濱河市筛峭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌陪每,老刑警劉巖影晓,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異檩禾,居然都是意外死亡挂签,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門盼产,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)饵婆,“玉大人,你說(shuō)我怎么就攤上這事戏售∏群耍” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵灌灾,是天一觀的道長(zhǎng)搓译。 經(jīng)常有香客問(wèn)我,道長(zhǎng)锋喜,這世上最難降的妖魔是什么些己? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮跑芳,結(jié)果婚禮上轴总,老公的妹妹穿的比我還像新娘。我一直安慰自己博个,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布功偿。 她就那樣靜靜地躺著盆佣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪械荷。 梳的紋絲不亂的頭發(fā)上共耍,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音吨瞎,去河邊找鬼痹兜。 笑死,一個(gè)胖子當(dāng)著我的面吹牛颤诀,可吹牛的內(nèi)容都是我干的字旭。 我是一名探鬼主播对湃,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼遗淳!你這毒婦竟也來(lái)了拍柒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤屈暗,失蹤者是張志新(化名)和其女友劉穎拆讯,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體养叛,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡种呐,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了弃甥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片陕贮。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖潘飘,靈堂內(nèi)的尸體忽然破棺而出肮之,到底是詐尸還是另有隱情,我是刑警寧澤卜录,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布戈擒,位于F島的核電站,受9級(jí)特大地震影響艰毒,放射性物質(zhì)發(fā)生泄漏筐高。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一丑瞧、第九天 我趴在偏房一處隱蔽的房頂上張望柑土。 院中可真熱鬧,春花似錦绊汹、人聲如沸稽屏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)狐榔。三九已至,卻和暖如春获雕,著一層夾襖步出監(jiān)牢的瞬間薄腻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工届案, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留庵楷,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像尽纽,于是被迫代替她去往敵國(guó)和親咐蚯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法蜓斧,類相關(guān)的語(yǔ)法仓蛆,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法挎春,異常的語(yǔ)法看疙,線程的語(yǔ)...
    子非魚_t_閱讀 31,630評(píng)論 18 399
  • (一)Java部分 1、列舉出JAVA中6個(gè)比較常用的包【天威誠(chéng)信面試題】 【參考答案】 java.lang;ja...
    獨(dú)云閱讀 7,104評(píng)論 0 62
  • Java8張圖 11直奋、字符串不變性 12能庆、equals()方法、hashCode()方法的區(qū)別 13脚线、...
    Miley_MOJIE閱讀 3,702評(píng)論 0 11
  • 1 不要矯情搁胆,最近有點(diǎn)矯情了,也不要玻璃心邮绿。 2 靜心渠旁,最近很浮躁,你總是靜不下心來(lái)做事情 3 耐心船逮,你一直說(shuō)自己...
    橋豆麻袋1號(hào)閱讀 248評(píng)論 0 0
  • 進(jìn)入初冬以來(lái)顾腊,一直感覺十分疲憊。這個(gè)周一挖胃,一如既往的忙碌杂靶。 早晨還下了點(diǎn)雨,晚上下班后繼續(xù)閱讀《寫出我心》酱鸭,讀的是...
    肖爺_族長(zhǎng)閱讀 431評(píng)論 6 9