Java異常處理錯誤

Java異常處理錯誤

       發現錯誤的最佳時期是在編譯階段,也就是在你運行程序之前。然而,編譯期間並不能找出所有的錯誤,餘下的問題必須在運行階段解決。這就需要錯誤源通過某種方式把適當的信息傳給某個接收者,該接收者知道如何處理這個問題。

       Java中的異常處理的目的在於通過使用少於目前數量的代碼來簡化大型,可靠的程序的生成,並且通過這種方式可以使你更加自信:你的應用中沒有未處理的錯誤。

       異常這個詞有我對此感到意外的意思。問題出現了,你也許不清楚該如何處理,但你的確知道不該置之不理;你要停下來,看看是不是有別人是不是在別的地方,能夠處理這個問題。只是在當前的環境中還沒有足夠的信息來解決這個問題,所以把問題提交到更高級別的環境中,在這裏將作出正確地決定。

        使用異常所帶來的另一個相當明顯的好處是:它往往能夠降低錯誤處理代碼的複雜度。如果不使用異常,那麼就必須檢查特定的錯誤,並在程序的許多地方去處理它。而如果使用異常,就不必在方法調用處進行檢查,因爲異常機制將能保證捕獲這個錯誤。並且,只需在一個地方處理錯誤,即所謂的異常處理程序中。這種方式不僅節省代碼,而且把“描述在正常執行過程中做什麼事”的代碼和“出了問題怎麼辦”的代碼相分離。

異常處理的過程:

       當拋出異常之後,有幾件事情會隨之發生。首先,同Java中其他對象的創建一樣,將使用new在堆上創建異常對象。然後,當前的執行路徑被終止,並且從當前環境中彈出對異常對象的引用。此時,異常處理機制接管程序,並開始尋找一個恰當的地方來繼續執行程序。這個恰當的地方就是異常處理程序,它的任務是將程序從錯誤狀態中恢復,以使程序能要麼換一種方式運行,要麼繼續運行下去。

import java.util.*;

public class WhoCalled{
	static void f(){
		try{
			throw new Exception();
		}catch(Exception e){
			for(StackTraceElement s:e.getStackTrace())
				System.out.println(s.getMethodName());
		}
	}
	static void g(){
		f();
	}
	static void h(){
		g();
	}
	public static void main(String[] args){
		f();
		System.out.println("--------------------------------------");
		g();
		System.out.println("--------------------------------------");
		h();
	}
}

finally子句:

無論異常是否拋出,finally子句總能被執行。

import java.util.*;

class ThreeException extends Exception{}

public class FinallyWorks{
	static int count=0;
	public static void main(String[] args){
		while(true){
			try{
				if(count++==0)
					throw new ThreeException();
				System.out.println("No exception");
			}catch(ThreeException e){
				System.out.println("ThreeException");
			}finally{
				System.out.println("In finally clause");
				if(count==2)
					break;
			}
		}
	}
}


發佈了253 篇原創文章 · 獲贊 26 · 訪問量 33萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章