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之外。编译器保证:
- 如果你有抛出异常,则你一定要使用throw来声明这件事。
- 如果你调用会抛出异常的方法,你必须得确认你知道异常得可能性。将调用包在try/catch块中是一种满足编译器得方法。
不是由编译器检查得RuntimeException异常被称为检查异常;RuntimeException被称为不检查异常,你可以自己抛出与抓住它们,但是没有这个必要,编译器也不管。