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被称为不检查异常,你可以自己抛出与抓住它们,但是没有这个必要,编译器也不管。

原文地址:https://www.cnblogs.com/yigegaozhongsheng/p/14082511.html