把有风险的程序代码包含在try/catch块中,编译器会放心很多。
因为try/catch块会告诉编译器你确实知道所调用的方法会有风险,并且也准备好要处理它。如果要处理异常情况,就把异常处理程序放在catch块中。
import javax.sound.midi.*;
public class MusicTest1 {
public void play(){
try{
Sequencer sequencer = MidiSystem.getSequencer(); //把有风险的程序放在try块
System.out.println("We got a sequencer!");
}catch(MidiUnavailableException ex){ //用catch块拜访异常状况的处理程序
System.out.println("Bummer");
}
}
public static void main(String[] args){
MusicTest1 mt=new MusicTest1();
mt.play();
}
}
方法可以用throw关键词抛出异常对象:
public void takeRisk() throws BadException{ //声明异常类型
if( abandonAllHope){
throw new FileIsTooSmallException();
}
}
finally:无论如何都要执行的部分
finally块是用来存放不管有没有异常都得执行的程序。如果try或catch块有return指令,finally还是会执行!流程会跳到finally然后再回到return指令。
try{
turnOvenOn();
x.bake();
} catch(BakingException ex){
ex.printStackTrace();
} finally{
turnOvenOff();
}
异常也是多态的,例如:
1.以异常的父类型来声明会抛出的异常:
public void doLaundry() throws ClothingException{
//声明成ClothingException可让你抛出ClothingException的子类异常
}
2.以所抛出的异常的父类型来catch异常:
try{
laundry.doLaundry();
} catch(ClothingException cex){ //可以catch任何ClothingException的子类
//解决方案
}