Java基本功練習十八(異常處理【獲取異常信息、鏈式異常和finally語句、自定製異常】)

在程序運行中,如果環境檢測出一個不可能執行的操作,就會出現運行時錯誤(runtime error)。例如:

越界錯誤ArrayIndexOutOfBoundsException。

文件不存在錯誤FileNotFoundException等等。

    Java中,異常會導致運行時錯誤。異常就是一個表示阻止執行正常進行的錯誤或情況。如果異常沒有被處理,那麼程序將會非正常終止。

應該處理這個異常,以便使得程序可以繼續運行或平穩終止。


範例一:異常處理的創建、拋出、捕獲以及處理異常。

運行效果如圖所示:

實現的源代碼如下:

package Blog;

public class blogTryProject{
	//獲取異常的信息
	public static void main(String[]args){
		try{
			System.out.println(sum(new int[]{1,2,3,4,5}));
		}
		catch(Exception ex){
			ex.printStackTrace();
			System.out.println("\n"+ex.getMessage());
			System.out.println("\n"+ex.toString());
			
			System.out.println("\nTrace Info Obtained form getStackTrace");
			StackTraceElement[] traceElements = ex.getStackTrace();
			for(int i = 0;i < traceElements.length;i++){
				System.out.print("method "+traceElements[i].getMethodName());
				System.out.print("("+traceElements[i].getClassName()+":");
				System.out.println(traceElements[i].getLineNumber()+")");
			}
		}
	}
	private static int sum(int[] list){
		int result = 0;
		for(int i = 0;i <= list.length;i++)
			result += list[i];
		return result;
	}
}

主要有三個異常,ArithmeticException、FileNotFoundException和InputMismatchException在Java API中有很多預定義的異常類,如下圖所示:


範例二:鏈式異常和finally語句。

運行效果如圖所示:

實現的源代碼如下所示:

package Blog;

public class blogTryProject{
	public static void main(String[]args){
		//鏈式異常
		ChainedExceptionDemo ced = new ChainedExceptionDemo();
		ced.main(args);
		//finally語句演示
		FinallyDemo fd = new FinallyDemo();
		fd.main(args);
	}
}
//鏈式異常
class ChainedExceptionDemo{
	public static void main(String[]args){
		try{
			method1();
		}
		catch(Exception ex){
			ex.printStackTrace();
		}
	}
	public static void method1()throws Exception{
		try{
			method2();
		}
		catch(Exception ex){
			throw new Exception("New info from method1,",ex);
		}
	}
	public static void method2()throws Exception{
		throw new Exception("New info from method2");
	}
}


//finally語句演示
class FinallyDemo{
	public static void main(String[]args){
		java.io.PrintWriter output = null;
		try{
			output = new java.io.PrintWriter("text.txt");
			output.println("Welcome to Java");
		}
		catch(java.io.IOException ex){
			ex.printStackTrace();
		}
		finally{
			if(output != null) output.close();
		}
		System.out.println("End of program");
	}
}
範例三:自定製異常。

運行效果如圖所示:

實現的源代碼如下所示:

package Blog;

public class blogTryProject{
	public static void main(String[]args){
		System.out.println("\n自定製異常");
		try{
			Circle c = new Circle();
			c.setRadius(-5);
		}
		catch(InvalidRadiusException ex){
			System.out.println("The invalid radius is "+ex.getRadius());
		}
	}
}
//自定製異常
class InvalidRadiusException extends Exception{
	private double radius;
	public InvalidRadiusException(double radius) {
		super("Invalid radius "+radius);
		this.radius = radius;
	}
	public double getRadius(){
		return radius;
	}
}

//帶半徑異常的圓類自定義異常
class Circle{
	private double radius;
	private static int numberOfObjects = 0;
	public Circle(){
		this(1.0);
	}
	public Circle(double newRadius){
		this.radius = newRadius;
//		setRadius(newRadius);
		numberOfObjects++;
	} 
	public double getRadius(){
		return radius;
	}
	public void setRadius(double newRadius)throws InvalidRadiusException{
		if(newRadius >= 0)
			radius = newRadius;
		else
			throw new InvalidRadiusException(newRadius);
	}
	public static int getNumberOfObjects(){
		return numberOfObjects;
	}
	public double findArea(){
		return radius * radius * Math.PI;
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章