1. 程式人生 > >java異常面試題及程式設計題

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的引用來實現引數的“任意化”,“任意化”帶來的缺點是要做顯式的強制型別轉換,而這種轉換是要求開發者對實際引數型別可以預知的情況下進行的。對於強制型別轉換錯誤的情況,編譯器可能不提示錯誤,在執行的時候才出現異常,這是一個安全隱患。 
  泛型的好處是在編譯的時候檢查型別安全,並且所有的強制轉換都是自動和隱式的,提高程式碼的重用率。