Head First Java学习笔记(11):异常处理

try/catch

编译器需要确定你了解所调用的方法是有风险的,只要你把有风险的程序代码包含在try/catch块中,编译器就不会报错。
异常是一种Exception类型的对象,Exception类型的对象可以是任何它的子类的实例。

try {
	//危险动作
} catch(Exception ex) {
	//尝试恢复
}

异常是由有异常的方法丢出的:
1.方法可以抓住其他方法所抛出的异常,异常总是会丢回给调用方。
2.会抛出异常的方法必须要声明它有可能会这么做。

//会抛出异常的方法
public void takeRisk() throws BadException {
	if(abandonAllHope) {
		throw new BadException();
	}
}
//调用该方法的代码
public void crossFingers() {
	try {
	anObject.takeRisk();
	} catch(BadException ex) {
	System.out.println("Aaargh!");
	ex.printStackTrace();
	}
}

编译器会检查不是RuntimeException的子类的异常,被称为“检查异常”。RuntimeException子类的异常被称为“运行时异常”。

流程控制

1.try块会先运行,如果不抛出异常,则跳过catch块执行后续部分。
2.如果抛出异常,会跳过try块与catch块中间部分代码而运行catch块程序,然后继续下去。
3.finally块是用来存放不管有没有异常都要执行的程序。

多态的异常

1.方法可以抛出多个异常,但其声明中必须含有全部可能的异常。
2.若多个异常有共同的父类时,可以只声明该父类就行。
3.必须有相对应的catch块来处理多个异常。
4.有多个catch块时要从小排到大,即按照继承树子类到父类的顺序排列。

duck

1.不想处理异常时,可以将其throws掉来避开。
2.这只是在踢皮球,早晚需要处理异常。

MIDI

JavaSound的工作原理:
发声的装置(Sequencer)→要演奏的乐曲(Sequence)→带有乐曲的信息记录(Track)→乐曲的音符等信息(Midi Event)

//取得Sequencer并打开
Sequencer player = MiddiSystem.getSequencer();
player.open();
//创建新的Sequence
Sequence seq = new Sequence(timing,4);
//从Sequence中创建新的Track
Track t = seq.createTrack();;
//填入MidiEvent并让Sequencer播放
t.add(myMidiEvent1);
player.setSequence(seq);

制作MidiEvent:

//创建Message
ShortMessage a = new ShortMessage();
//置入指令
a.setMessage(144,1,44,100);
//创建MidiEvent
MidiEvent noteOn = new MidiEvent(a,1)
//将MidiEvent加入到Track中
track.add(noteOn);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值