1. 程式人生 > 實用技巧 >Java學習筆記-異常處理-有風險的行為

Java學習筆記-異常處理-有風險的行為

Java使用異常來告訴呼叫方法的程式程式碼:“有問題,我不行了!”
import javax.sound.midi.*;
public class MusicTest1 {
    public void play(){
        try {
            Sequencer sequencer= MidiSystem.getSequencer();
            //getSequencer()這個方法可能會在執行期間出問題,所以必須宣告出調用它可能會有風險。
        } catch (MidiUnavailableException e) {
            e.printStackTrace();
            System.out.println(
"Bummer"); } System.out.println("我們有一個sequencer"); }//關閉播放 public static void main(String[] args){ MusicTest1 mt=new MusicTest1(); mt.play(); } }//關閉類
編譯器要確定你瞭解所呼叫的方法是有風險的 異常是一種Exception型別的物件。
try {
    //危險動作
} catch (Exception e) {//就跟方法的引數宣告一樣
    //嘗試恢復
    
//這一段只會在有丟擲異常時執行 }
區域性的Exception繼承結構 如果你的程式程式碼會抓住異常,那是誰把他丟擲來的呢? 方法可以抓住其他方法所丟擲的異常。異常總是會丟給呼叫方。 會丟擲異常的方法要宣告它有可能會怎麼做。
public void takeRisk() throws Exception{//必須要宣告他會丟擲Exception
    if (abandonAllHope){
        throw new Exception();
        //建立Exception物件並丟擲
    }
}
public void crossFingers(){
    
try { anObject.takeRisk(); }catch (Exception ex){ System.out.println("Aaargh!"); ex.printStackTrace(); //如果無法從異常中恢復,至少也要使用printStackTrace()來列出有用的資訊。 } }
編譯器會和核對每件事,除了RuntimeException之外。編譯器保證:
  1. 如果你有丟擲異常,則你一定要使用throw來宣告這件事。
  2. 如果你呼叫會丟擲異常的方法,你必須得確認你知道異常得可能性。將呼叫包在try/catch塊中是一種滿足編譯器得方法。
不是由編譯器檢查得RuntimeException異常被稱為檢查異常;RuntimeException被稱為不檢查異常,你可以自己丟擲與抓住它們,但是沒有這個必要,編譯器也不管。