異常

異常:

異常也稱bug,分爲編譯異常和運行異常

Java所有異常都是繼承Throwable接口,程序異常是Throwable實現類的對象,Error異常是系統級別的,jdk問題(你解決不了)

Sting a=null;
try{//可能會出現異常的代碼
    a.trim();//nullpointerException

}catch(Exception e){//捕獲並處理異常的方法
     System.out.println("異常");
    }finally{//總是會執行的代碼
}

try可以和多個catch塊配合,處理多個異常。

異常處理機制:

(1)如果執行中出現異常,會自動生成一個異常類對象,該對象交給java系統,這個過程叫抱出(throw);

(2)當Java系統收到該對象,會尋找能處理這異常的代碼並交給它,這個過程叫捕獲(catch)異常;

(3)如果找不到捕獲異常的方法,則停止運行,Java程序也將推出;

拋出異常:

在定義一個方法時,如果不能確定如何處理其中可能出現的異常,可以不在方法中對異常進行處理,而是將可能發生的異常給調用者來處理:

格式(throws)在類頭拋是加“s”,在類中拋是不加“s”;

public double test1(int a,int b)throw Exception{



}

在main方法中,調用者調用的test1方法,必須寫在try{ }中,因爲前面的test1已經拋出異常,必須捕獲;

在main方法中不能throws;

捕獲異常和拋出異常的方式,並不是排它,它們可以結合在一起同時使用;

 

自定義異常:(可以通過繼承Exception或他的子類來實現自己的異常類)

//自定義異常類
class MyException extends Exception{
	
	public MyException(){//一般而言,自定義異常類會設計兩個構造器,帶參與不帶參,帶參用於傳遞詳細的出錯信息
		
	}
	
	public MyException(String message){
		super(message);
	}
	
	public String toString(){
		return this.getMessage();
	}
}



//return和try catch的關係
class Demo6{
	public static void main(String[] args){
		double d = divide(10,5);
		System.out.println(d);
	}
	
	public static double divide(int a,int b){
		double q = 0;
		try{
			
			if(b==0)
				throw new MyException("除數不能爲0");
			q = a*1.0/b;
			return q;//try中的return不起作用
		}catch(MyException me){
			System.out.println(me);
			return q+5;
		}finally{//如果finally中有return語句,就以此語句爲返回值
			return q+10;
			//System.out.println("ff..");
		}
	}
}

輸出結果爲:除數不能爲零

                     10.0

try-catch-finally中的return  finally{}是不管怎樣的時候都要運行,所以當finally中有return,前面的try、catch中的return沒用,當finally中沒有return時,try、catch中的return纔有用;

子類拋異常要比父類異常範圍小或等於:

import java.io.*;
class Parent{
	public void test1()throws ClassNotFoundException,FileNotFoundException{
		System.out.println("父類的方法");
	}
}




/**
子類方法的異常範圍必須小於等於父類方法的異常範圍
*/
class Son extends Parent{
	public void test1()throws ClassNotFoundException,FileNotFoundException{
		System.out.println("子類的方法");
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章