在方法的宣告時使用,作用是宣告該方法可能有該種異常,不一定會有,是一種傾向,一種預防措施,保證**的健壯性。讓你的呼叫者知道,我這個方法可能會丟擲何種異常,讓我的呼叫者知道並且要做出一定的處理。因此就要求其呼叫者做出一定「防範措施」來進行捕獲可能會丟擲的異常並解決或者進行繼續丟擲(不推薦)。例如進行try catch解決。
public void method1() throws ***exception,yyyexception
//聲名多個異常時異常之間用逗號隔開
public void method2()
catch(***exception e1)
catch(yyyexception e2)
}
當然你也可以不用在這進行catch處理,而是進行繼續丟擲,
即public void method2()throws ***exception,yyyexception
這樣之後異常的處理就交給了method2()的呼叫者。。類似的進行向上層層丟擲。當然無論怎麼丟擲,最後都要有乙個呼叫者解決,最終的呼叫者是jvm,也就是說如果一直沒解決,那麼就只能有jvm來解決,jvm的解決方法很簡單,就是吧你的異常資訊列印出來..也就是我們常見的紅字
在該方法內部使用,此時就是真的丟擲了乙個異常,作用就是丟擲異常物件給呼叫者,自己不處理。如果呼叫者也不處理,那麼就會層層丟擲,直到有呼叫者處理或者最終拋給虛擬機器,虛擬機器的處理方式就是列印你的異常資訊,也就是我們經常看到的紅字。。但是一般執行時異常都不會選擇丟擲,而是在方法中直接catch處理了。。
public int method1(int a ,int i)
如果i>a.length()了,那麼就會丟擲乙個下標越界的異常物件,方法本身不作處理。僅僅把異常丟擲。當然這種方式我們並不推薦,這是一種消極的處理方式。
出現這種異常編譯可以通過,但是執行時會報錯,例如上面的陣列下表越界異常,對於這種執行時異常,我們一般不採用throws進行宣告,而是進行自定義丟擲(用throw關鍵字)方式或者虛擬機器預設的丟擲方式丟擲(不做任何處理),然後在和控制台答應異常資訊來讓程式設計師進行修改。當然也可以進行catch捕獲然後進行處理,並進行日誌儲存。。具體要用那種方式要根據程式的要求來靈活選擇,是要在程式中依靠程式自己處理還是要由控制台列印錯誤資訊,由程式的具體功能來決定。
除了runtimeexception及其子類以外其他所有exception的子類都是非執行時異常
這種異常又被稱為編譯時異常,必須宣告或者捕獲,不然編譯不通過。也就是說這些異常是必須要在方法宣告中throws exception,而且所有此方法的呼叫者如果不寫try catch的話就要一直throws exception,一直到main方法為止。如果不throws,就一定要try catch,如果乙個應該丟擲非runtimeexcetion的方法既沒有throws exception也沒有try catch,一定會報錯的,編譯無法通過。
另外異常處理的原則是盡可能早的catch異常,正常的程式不應該寫throws exception。
Java中關於遞迴演算法
首先演示乙個遞迴 public class testrecursion public static void main string args 乙個簡單的遞迴 乙個方法呼叫其本身方法 當然此程式執行有異常,只是說明遞迴原理 改善程式 public class testrecursion else p...
關於Java中Synchronized互斥範圍小結
synchronized的使用比較簡單,就是對 進行同步。但是昨天在看書的時候發現了乙個比較困惑的地方,就是類和例項物件之間的同步。有以下幾種情況 1.靜態方法間的同步即對類物件進行同步,執行緒對test1和test2方法的訪問是互斥的 static synchronized void test1 ...
關於Java中的過載
方法的重寫 override 兩同兩小一大原則 方法名相同,引數型別相同 子類返回型別等於父類方法返回型別,子類丟擲異常小於等於父類方法丟擲異常,子類訪問許可權大於等於父類方法訪問許可權。詳細的說明為 重寫是子類對父類的允許訪問的方法的實現過程進行重新編寫,返回值和形參都不能改變。即外殼不變,核心重...