【8】進(jìn)大廠必須掌握的面試題-Java面試-異常和線程

Q1速兔。錯(cuò)誤和異常有什么區(qū)別?

錯(cuò)誤是在運(yùn)行時(shí)發(fā)生的不可恢復(fù)的情況妒御。如OutOfMemory錯(cuò)誤姑蓝。這些JVM錯(cuò)誤無法在運(yùn)行時(shí)修復(fù)。盡管可以在catch塊中捕獲錯(cuò)誤梆靖,但是應(yīng)用程序的執(zhí)行將停止并且無法恢復(fù)。

而異常是由于輸入錯(cuò)誤或人為錯(cuò)誤等原因而發(fā)生的情況。例如朱转,如果指定的文件不存在,則將拋出FileNotFoundException积暖。否則藤为,如果嘗試使用null引用,則會(huì)發(fā)生NullPointerException夺刑。在大多數(shù)情況下缅疟,有可能從異常中恢復(fù)(可能是通過向用戶提供輸入正確值的反饋等)分别。

Q2。您如何處理Java異常存淫?

Java中有五個(gè)關(guān)鍵字用于處理異常:

  1. try
  2. catch
  3. finally
  4. throw
  5. throws

Q3耘斩。Checked Exception和Unchecked Exception有什么區(qū)別?

檢查異常

  • 擴(kuò)展Throwable類的類(RuntimeException和Error除外)被稱為檢查異常桅咆。
  • 被檢查的異常在編譯時(shí)被檢查煌往。
  • 示例:IOException,SQLException等轧邪。

未經(jīng)檢查的異常

  • 擴(kuò)展RuntimeException的類稱為未檢查的異常刽脖。
  • 未檢查的異常不會(huì)在編譯時(shí)檢查。
  • 例如:ArithmeticException忌愚,NullPointerException等曲管。

Q4。關(guān)鍵字final硕糊,finally和finalize有什么目的院水?

final:**

Final用于對(duì)類,方法和變量施加限制简十。不能繼承final類檬某,不能覆蓋final方法,并且不能更改final變量值螟蝙。讓我們看下面的示例恢恼,以更好地理解它。

class FinalVarExample {
    public static void main( String args[]){
        final int a=10;   // Final variable
        a=50;             //Error as value can't be changed
    }
}

finally

最后用于放置重要代碼胰默,無論是否處理異常场斑,都將執(zhí)行該代碼。讓我們看下面的示例牵署,以更好地理解它漏隐。

class FinallyExample {
    public static void main(String args[]){
        try {
            int x=100;
        }catch(Exception e) {
            System.out.println(e);
        }finally {
            System.out.println("finally block is executing");
        }
    }
}

finalize

Finalize用于在垃圾回收之前就執(zhí)行清理處理。讓我們看下面的示例奴迅,以更好地理解它青责。

class FinalizeExample {
    public void finalize() {
        System.out.println("Finalize is called");
    }
    public static void main(String args[]){
        FinalizeExample f1=new FinalizeExample();
        FinalizeExample f2=new FinalizeExample();
        f1= NULL;
        f2=NULL;
        System.gc();
    }
}

Q5。throw和throws有什么區(qū)別取具?

throw throws
引發(fā)用于顯式引發(fā)異常脖隶。 引發(fā)用于聲明異常。
已檢查的異常不能僅通過throw傳播者填。 可以使用throws傳播檢查的異常浩村。
引發(fā)后跟一個(gè)實(shí)例做葵。 投擲之后是上課占哟。
在方法中使用了throw。 拋出與方法簽名一起使用。
您不能拋出多個(gè)異常 您可以聲明多個(gè)異常榨乎,例如public void method()引發(fā)IOException怎燥,SQLException。

Q6蜜暑。什么是Java中的異常層次結(jié)構(gòu)铐姚?

層次結(jié)構(gòu)如下:

Throwable是所有Exception類的父類。異常有兩種類型:檢查的異常和UncheckedExceptions或RunTimeExceptions肛捍。兩種類型的異常都擴(kuò)展了Exception類隐绵,而錯(cuò)誤又進(jìn)一步分為虛擬機(jī)錯(cuò)誤和斷言錯(cuò)誤。

Q7拙毫。如何創(chuàng)建自定義異常依许?

要?jiǎng)?chuàng)建您自己的異常,請(qǐng)擴(kuò)展Exception類或其任何子類缀蹄。

  • class New1Exception extends Exception {} //這將創(chuàng)建Checked Exception
  • 類NewException擴(kuò)展了IOException {} //這將創(chuàng)建Checked異常
  • 類NewException擴(kuò)展了NullPonterExcpetion {} //這將創(chuàng)建UnChecked異常

Q8峭跳。Java異常類的重要方法有哪些?

異常及其所有子類均未提供任何特定方法缺前,并且所有方法均在基類Throwable中定義蛀醉。

  1. String getMessage() –此方法返回Throwable消息字符串,并且可以在通過其構(gòu)造函數(shù)創(chuàng)建異常時(shí)提供該消息衅码。
  2. String getLocalizedMessage()–提供此方法拯刁,以便子類可以重寫它以向調(diào)用程序提供特定于語言環(huán)境的消息。此方法的可拋出類實(shí)現(xiàn)僅使用getMessage()方法即可返回異常消息逝段。
  3. Synchronized Throwable getCause() –此方法返回異常原因筛璧,或者返回null id,原因未知惹恃。
  4. String toString() –此方法以String格式返回有關(guān)Throwable的信息夭谤,返回的String包含Throwable類的名稱和本地化消息。
  5. void printStackTrace() –此方法將堆棧跟蹤信息打印到標(biāo)準(zhǔn)錯(cuò)誤流巫糙,此方法已重載朗儒,我們可以傳遞PrintStream或PrintWriter作為參數(shù),以將堆棧跟蹤信息寫入文件或流参淹。

Q9醉锄。進(jìn)程和線程之間有什么區(qū)別?

Process Thread
定義 程序的執(zhí)行實(shí)例稱為進(jìn)程浙值。 線程是進(jìn)程的子集恳不。
通訊 進(jìn)程必須使用進(jìn)程間通信與同級(jí)進(jìn)程進(jìn)行通信。 線程可以直接與其進(jìn)程中的其他線程通信开呐。
控制 進(jìn)程只能控制子進(jìn)程烟勋。 線程可以對(duì)同一進(jìn)程的線程行使相當(dāng)大的控制權(quán)规求。
變化 父進(jìn)程中的任何更改都不會(huì)影響子進(jìn)程。 主線程中的任何更改都可能影響該進(jìn)程其他線程的行為卵惦。
記憶 在單獨(dú)的內(nèi)存空間中運(yùn)行阻肿。 在共享內(nèi)存空間中運(yùn)行。
受控制于 進(jìn)程由操作系統(tǒng)控制沮尿。 線程由程序中的程序員控制丛塌。
依存關(guān)系 流程是獨(dú)立的。 線程是依賴的畜疾。

Q10赴邻。什么是finally塊?有沒有什么情況下最終將不會(huì)執(zhí)行啡捶?

最終塊是始終執(zhí)行一組語句的塊乍楚。它始終與try塊相關(guān)聯(lián),無論是否發(fā)生任何異常届慈。
是的徒溪,如果程序通過調(diào)用System.exit()或?qū)е轮旅e(cuò)誤(導(dǎo)致進(jìn)程中止)退出,則最終將不會(huì)執(zhí)行金顿。

Q11臊泌。什么是同步?

同步是指多線程揍拆。同步的代碼塊一次只能由一個(gè)線程執(zhí)行渠概。由于Java支持執(zhí)行多個(gè)線程,因此兩個(gè)或多個(gè)線程可以訪問相同的字段或?qū)ο笊┧M绞鞘顾胁l(fā)線程在執(zhí)行中保持同步的過程播揪。同步避免了由于共享內(nèi)存視圖不一致而導(dǎo)致的內(nèi)存一致性錯(cuò)誤。當(dāng)一個(gè)方法被聲明為已同步時(shí)筒狠,線程將保持該方法對(duì)象的監(jiān)視器猪狈。如果另一個(gè)線程正在執(zhí)行同步方法,則該線程將被阻塞辩恼,直到該線程釋放監(jiān)視器雇庙。

同步-Java面試問題-Edureka

Q12。我們可以在單個(gè)try塊下寫入多個(gè)catch塊嗎灶伊?

是的疆前,我們可以在單個(gè)try塊下包含多個(gè)catch塊,但是方法應(yīng)從特定到一般聘萨。讓我們通過一個(gè)編程示例來理解這一點(diǎn)竹椒。

public class Example {
    public static void main(String args[]) {
        try {
            int a[] = new int[10];
            a[10] = 10 / 0;
        } catch (ArithmeticException e) {
            System.out.println("Arithmetic exception in first catch block");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("Array index out of bounds in second catch block");
        } catch (Exception e) {
            System.out.println("Any exception in third catch block");
        }
    }
}

Q13。Java異常類的重要方法有哪些米辐?

方法在基類Throwable中定義胸完。Java異常類的一些重要方法如下所述书释。

  1. String getMessage() –此方法返回有關(guān)異常的消息String〔奥穑可以通過其構(gòu)造函數(shù)提供消息。
  2. public StackTraceElement [] getStackTrace()–此方法返回一個(gè)數(shù)組择膝,其中包含堆棧跟蹤中的每個(gè)元素誓琼。索引0處的元素表示調(diào)用堆棧的頂部,而數(shù)組中的最后一個(gè)元素表示調(diào)用堆棧底部的方法肴捉。
  3. 同步的Throwable getCause() –此方法返回Throwable對(duì)象表示的異常原因或null ID腹侣。
  4. String toString() –此方法以String格式返回信息。返回的字符串包含Throwable類的名稱和本地化消息齿穗。
  5. void printStackTrace() –此方法將堆棧跟蹤信息打印到標(biāo)準(zhǔn)錯(cuò)誤流傲隶。

Q14。什么是Java中的OutOfMemoryError窃页?

OutOfMemoryError是java.lang.Error的子類跺株,通常在我們的JVM內(nèi)存不足時(shí)發(fā)生。

Q15脖卖。什么是線程乒省?

線程是可以由調(diào)度程序獨(dú)立執(zhí)行的最小編程指令。在Java中畦木,所有程序都將至少具有一個(gè)線程袖扛,該線程稱為主線程。當(dāng)程序開始執(zhí)行時(shí)十籍,此主線程由JVM創(chuàng)建蛆封。主線程用于調(diào)用程序的main()勾栗。

Q16妒蛇。創(chuàng)建線程的兩種方法是什么?

在Java中陶耍,可以通過以下兩種方式創(chuàng)建線程:

  • 通過實(shí)現(xiàn)Runnable接口。
  • 通過擴(kuò)展線程

Q17馒过。Java中有哪些不同類型的垃圾收集器腹忽?

Java中的垃圾收集程序,可以幫助進(jìn)行隱式內(nèi)存管理。由于在Java中骇扇,可以使用new關(guān)鍵字動(dòng)態(tài)創(chuàng)建對(duì)象,一旦創(chuàng)建對(duì)象,該對(duì)象將消耗一些內(nèi)存。一旦工作完成盖淡,并且不再有對(duì)象的引用答憔,使用垃圾回收的Java將破壞該對(duì)象并釋放其占用的內(nèi)存心俗。Java提供了四種類型的垃圾收集器:

  • 串行垃圾收集器
  • 并行垃圾收集器
  • CMS垃圾收集器
  • G1垃圾收集器

歡迎關(guān)注 Java架構(gòu)師社區(qū)公眾號(hào).
本文轉(zhuǎn)載自Java架構(gòu)師必看 ,更多內(nèi)容點(diǎn)擊查看揪利!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市甜刻,隨后出現(xiàn)的幾起案子楚午,更是在濱河造成了極大的恐慌阱驾,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡戚扳,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來禀综,“玉大人,你說我怎么就攤上這事覆旭⊥俗樱” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵型将,是天一觀的道長(zhǎng)寂祥。 經(jīng)常有香客問我,道長(zhǎng)七兜,這世上最難降的妖魔是什么丸凭? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮腕铸,結(jié)果婚禮上惜犀,老公的妹妹穿的比我還像新娘。我一直安慰自己狠裹,他們只是感情好虽界,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著涛菠,像睡著了一般莉御。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上俗冻,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天礁叔,我揣著相機(jī)與錄音,去河邊找鬼言疗。 笑死晴圾,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的噪奄。 我是一名探鬼主播死姚,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼勤篮!你這毒婦竟也來了都毒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤碰缔,失蹤者是張志新(化名)和其女友劉穎账劲,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瀑焦,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年腌且,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片榛瓮。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡铺董,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出禀晓,到底是詐尸還是另有隱情精续,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布粹懒,位于F島的核電站重付,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏凫乖。R本人自食惡果不足惜确垫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拣凹。 院中可真熱鬧森爽,春花似錦恨豁、人聲如沸嚣镜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)菊匿。三九已至,卻和暖如春计福,著一層夾襖步出監(jiān)牢的瞬間跌捆,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工象颖, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留佩厚,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓说订,卻偏偏與公主長(zhǎng)得像抄瓦,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子陶冷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348