Java面試例題解析<一>


Java面試例題解析<一>

作為穩居編程語言排行榜前三的Java語言,具有非常多的優秀特性,同時擁有龐大的類庫生態和大量的開發者。

Java語言在大數據生態體系中地位也是無可撼動,目前流行的大數據生態組件,很多都是用Java語言或基於JVM的語言(如Scala)開發的。

1.程序設計基礎概念考查

對於一個初級崗求職者或者應屆畢業生來說,公司除了對項目經驗有所問詢之外,最好的考察辦法就是檢查基本功,包括編程風格,以及程序結構,數據類型,賦值語句,類型轉換,運算符,異常處理等程序設計基本概念的理解。

因此面試之前,一定要對自己所掌握的基本概念知識較為熟悉,尤其是對各種細緻的考點要加以重視。

Java程序設計基本概念考察中,對類型轉換和異常處理的考察最為常見,有以下原因:

1.在Java程序中,不同的基本類型的值經常需要進行互相轉換,實際工作中因為對它們的掌握不夠熟練寫出錯誤代碼的情況經常發生。

2.異常處理機制在實際工作中會經常被用來實現將程序的異常處理代碼和正常業務代碼分離,異常處理代碼的錯誤要麼高調拋出以讓開發者定位處理或低調捕獲從而不影響代碼的正常執行,從而提高程序的健壯性,現在異常機制已經成為判斷一門編程語言是否成熟的標準。

面試例題1

Java基本類型的類型轉換有幾種方式,你能簡單闡述一下嗎?

解析:有兩種類型轉換方式:自動類型轉換和強制類型轉換,低級數據類型到高級數據類型的轉換稱為自動類型轉換,高級數據類型到低級數據類型的轉換稱為強制類型轉換。

這些類型由低級到高級分別為(byte,short,char)-->int-->long-->float-->double。

以上回答基本就是這道考題的標準答案,不過如果你能就此考題回答出更為展現你基本功底的以下擴展知識點和舉出具體示例,將會給面試大大加分。

加分答法:基本類型的轉換首先要分為簡單數據類型之間的轉換和其他數據類型到字符串的轉換。

1.簡單數據類型之間的轉換可以分為:低級到高級的自動類型轉換、高級到低級的強制類型轉換、通過包裝類過渡類型進行轉換。

自動類型轉換示例:

<code>char c = 'c';
int i = c;
System.out.println("output:" + i);

輸出:output:99/<code>

強制類型轉換示例:

<code>double dl = 3.14;
int i = (int)dl;
//這種轉換可能會導致溢出或精度的下降/<code>

包裝類過渡類型轉換示例:

<code>float f1 = 100.00f;
Float F1 = new Float(f1);
//根據Java的自動裝箱拆箱機制,也可直接寫成Float F1=f1;
Double d1 = F1.doubleValue();/<code>

2.其他數據類型轉化為字符串,一般通過toString()方法;Character、Integer、Float、Double、Boolean、Short等類的toString方法用於將字符、整數、浮點數、雙精度數、邏輯數、短整形等類型轉化為字符串。

<code>int i1 = 10;
Integer I1 = new Integer(i1);//也可直接寫成Integer I1 =i1;
String s = I1.toString();/<code>

面試例題2

關於異常處理機制,你能簡單闡述一下嗎?

解析:在Java程序運行時,常常會出現一些非正常的現象,根據其性質可分為錯誤和異常。一般來說,最常見的錯誤有程序進入死循環、內存洩漏等。這種情況下,程序運行時本身無法解決。Java錯誤對應的類為Error類。通常Java程序不對這類錯誤進行處理。

異常是程序執行時遇到的可避免的程序錯誤,常見的有數組下標越界,算法溢出(超出數值表達範圍)、除數為零、無效參數等。這種情況程序運行時本身可以解決,Java異常對應的類為Exception類。它有各種不同的子類分別對應於不同類型的異常。通常異常有兩種處理方式,一種是通過catch捕獲,一種是通過throws聲明異常。

PS:實際公司面試中,若之前有筆試,很可能會針對異常處理出一道針對具體異常類型的代碼考題。所以面試者還是需要對異常處理的不同場景的具體運用有所研究和準備才行,建議在認真學習了異常處理機制的理論知識前提下,多找找相關筆試題刷刷。

面試例題3

異常處理的關鍵語句是什麼樣的?

Java異常處理的關鍵語句有五個:try、catch、throw、throws、finally。

1.拋出異常並進行捕獲的完整語句格式如下,當然也允許try...catch或try...finally這兩種寫法。

<code>try{ 
//throw Exception throw語句拋出明確的異常
}
catch{
//find Exception
//hand of it
}
finally{
//must be run
}/<code>

try、catch、finally三個語句塊可能會涉及以下考題:

1)try、catch、finally可以單獨使用嗎? 不可以,只能組成以上所述三種語句格式。

2)try中定義的變量catch和finally能夠訪問嗎?不能,三個代碼塊中變量的作用域為代碼塊內部,分別獨立而不能互相訪問,如果要在三個塊中都可以訪問,則需要將變量定義到這些塊的外面。

3)如有多個catch能夠捕獲所拋出異常,那多個catch塊的代碼都會被執行嗎?不會,只會執行第一個匹配上的catch塊代碼。

4)finally語句塊的代碼一定會被執行嗎?會,無論異常是否發生,finally都會被執行。

2.如果一個方法想拋出異常但自身不進行處理,交給上層處理,它就必須標記這種行為,以使方法的調用者能夠正常運行程序,無需處理異常。要做到這點,我們可以在方法聲明中包含一個throws子句。一個throws子句列舉了一個方法可能引發的所有異常類型。

PS:Java編譯器會要求方法必須聲明拋出可能發生的未被捕獲的非運行時異常,但是並不要求必須聲明拋出未被捕獲的運行時異常。由程序錯誤導致的異常屬於運行時異常(RuntimeException);而程序本身沒有問題,但由於像I/O錯誤這類異常導致的異常屬於其他異常。程序本身的問題,也就是拋出的運行時異常最好是就地解決。

<code>public void info() throws Exception
{
//body of method
}
//Exception 是該方法可能引發的所有的異常,也可以是異常列表,中間以逗號隔開。/<code>


分享到:


相關文章: