java異常面試題及程式設計題
概念題
1.java中用來丟擲異常的關鍵字是什麼?
throw
2.異常和Error的區別?
error:是不可捕捉到的,無法採取任何恢復的操作,頂多只能顯示錯誤資訊。
Exception :表示可恢復的例外,這是可捕捉到的
3.什麼是異常?
所謂異常是指程式在執行過程中發生的一些不正常事件。(如:除0溢位,陣列下標越界,所讀取的檔案不存在)
4.什麼類是所有異常類的父類
Throwable類
5.java虛擬機器能自動處理的異常是什麼?
執行異常
6.Try-catch-finally的執行過程
try{}語句塊中放的是要檢測的java程式碼,可能有會丟擲異常,也可能會正常執行
catch(異常型別){}塊是當java執行時系統接收到try塊中所丟擲異常物件時,會尋找處理這一異常catch塊來進行處理(可以有多個catch塊)
finally{}不管系統有沒有丟擲異常都會去執行,一般用來釋放資源。除了在之前執行了System.exit(0)
7.常見的異常?你的理解。
常見異常:RuntimeException,IOException,SQLException,ClassNotFoundException
8.final, finally, finalize的區別。
final用於宣告屬性,方法和類,分別表示屬性不可交變,方法不可覆蓋,類不可繼承。
finally是異常處理語句結構的一部分,表示總是執行。
finalize是Object類的一個方法,在垃圾收集器執行的時候會呼叫被回收物件的此方法,供垃圾收集時的其他資源回收,例如關閉檔案等。
9.Java中的異常處理機制的簡單原理和應用。
當JAVA程式違反了JAVA的語義規則時,JAVA虛擬機器就會將發生的錯誤表示為一個異常。違反語義規則包括2種情況。一種是JAVA類庫內建的語義檢查。例如陣列下標越界,會引發IndexOutOfBoundsException;訪問null的物件時會引發NullPointerException。另一種情況就是JAVA允許程式設計師擴充套件這種語義檢查,程式設計師可以建立自己的異常,並自由選擇在何時用throw關鍵字引發異常。所有的異常都是java.lang.Thowable的子類。
10.執行時異常與一般異常有何異同?
Java提供了兩類主要的異常:執行時異常runtime exception和一般異常checked exception。checked 異常。對於後者這種異常,JAVA要求程式設計師對其進行catch。所以,面對這種異常不管我們是否願意,只能自己去寫一大堆catch塊去處理可能的異常。
執行時異常我們可以不處理。這樣的異常由虛擬機器接管。出現執行時異常後,系統會把異常一直往上層拋,一直遇到處理程式碼。如果不對執行時異常進行處理,那麼出現執行時異常之後,要麼是執行緒中止,要麼是主程式終止。
.編寫一個員工類,
(1) 有屬性:
編號,姓名,年齡,工資,身份證號碼,員工人數,員工工資總額
(2) 有構造器:
構造器1:設定編號,年齡,姓名;如果年齡小於18,丟擲年齡低異常;如果年齡大於60
丟擲年齡高異常,如果姓名為null或為空字串,丟擲空異常。
構造器2:設定工資,設定身份證號碼;如果工資低於600,丟擲工資低異常。
(3) 有方法
增加工資 addSalary(double addSalary),丟擲工資高異常,當增加後的工資大於員工工資總額時,丟擲此異常。
減少工資 minusSalary(double minusSalary), 丟擲工資低異常,當減少後的工資低於政府最低工資時,丟擲工資低異常。
顯示員工工資總額方法:showTotalSalary(), 丟擲空異常,當工資總額為0時,丟擲此異常。
顯示員工人數:void showTotalEmployee(),丟擲空異常。當員工人數為0時,丟擲此異常。
2.編寫一道自定義異常。
反射與泛型package xianweifu; public class exceptionDemo { public static void main(String[] args) { Bar bar = new Bar(); try{ bar.enter(15); }catch(AgeLessThanEighteenException e){ System.out.println("錯誤資訊:"+e.getMessage()); } } } //定義了一個異常類 class AgeLessThanEighteenException extends Exception{ private String message;//描述異常資訊 public AgeLessThanEighteenException(String message){ this.message = message; } public String getMessage(){ return message; } } class Bar{ public void enter(int age)throws AgeLessThanEighteenException{ if(age<18){ throw new AgeLessThanEighteenException("未成年"); } else{ System.out.println("歡迎光臨"); } } }
1.Java反射機制的作用
java反射機制是在執行狀態中,對於任意一個類,都能夠知道這個類所以屬性和方法;對於任意一個物件,都能呼叫它的任意一個方法;這種動態獲取資訊以及動態呼叫物件的方法的功能稱為java語言的反射機制。
2.什麼是反射?什麼是泛型?
反射:是指主要指程式可以訪問、檢測和修改它本身狀態或行為的一種能力
泛型:泛型是Java SE 1.5的新特性,泛型的本質是引數化型別,也就是說所操作的資料型別被指定為一個引數。這種引數型別可以用在類、介面和方法的建立中,分別稱為泛型類、泛型介面、泛型方法。 Java語言引入泛型的好處是安全簡單。
3.Java的泛型是如何工作的 ? 什麼是型別擦除 ?
Java 泛型(Generic)的引入加強了引數型別的安全性,減少了型別的轉換,但有一點需要注意:Java 的泛型在編譯器有效,在執行期被刪除,也就是說所有泛型引數型別在編譯後都會被清除掉
面試題:什麼是泛型?泛型的優點?jdk各版本之間的區別?
泛型是Java SE 1.5的新特性,泛型的本質是引數化型別,也就是說所操作的資料型別被指定為一個引數。這種引數型別可以用在類、介面和方法的建立中,分別稱為泛型類、泛型介面、泛型方法。
Java語言引入泛型的好處是安全簡單。
在Java SE 1.5之前,沒有泛型的情況的下,通過對型別Object的引用來實現引數的“任意化”,“任意化”帶來的缺點是要做顯式的強制型別轉換,而這種轉換是要求開發者對實際引數型別可以預知的情況下進行的。對於強制型別轉換錯誤的情況,編譯器可能不提示錯誤,在執行的時候才出現異常,這是一個安全隱患。
泛型的好處是在編譯的時候檢查型別安全,並且所有的強制轉換都是自動和隱式的,提高程式碼的重用率。