JAVA简明摘要(十一)有风险的行为(异常处理)

1 异常

使用带有throws的方法时需要把方法放入try/catch函数中。

import javax.sound.midi.*;

public class MusicTest1
{
    public void play()
    {
        try
        {
            Sequencer sqquencer = MidiSystem.getSequencer();
            System.out.println("We got a sequencer");
        }
        catch (MidiUnavailableException ex)
        //catch (Exception ex)
        {
            System.out.println("Bummer");
        }

    }

    public static void main(String[] args)
    {
        MusicTest1 mt = new MusicTest1();
        mt.play();
    }
}

异常是一种Exception类型的对象,其他异常都是Exception的子类。

2 抛出异常

有风险,会抛出异常的程序代码:
public void takeRisk() throw BadException
{
  if(abandonAllHope)
  {
    throw new BadException();
  }
}
调用该方法的程序代码
public void crossFingers()
{
  try
  {
    anObject.takeRisk();
  }
  catch(BadException ex)
  {
    ex.printStackTrace();
  }
}

3 RuntimeExceptions

RuntimeExceptions极其子类被称为不检查异常,编译器不会抛出其异常。
因为大部分RuntimeExceptions都是因为程序的逻辑问题。
try/catch是用来处理真正的异常,而不是程序中的逻辑错误。

4 finally 一定会执行的部分

finally块是用来存放不管有没有异常都得执行的程序。
可以把重要的代码集中在一处,不需要在try和finally都写一遍。
如果try或catch有return指令,finally还是会执行,再跳回return指令。

  try
  {
    anObject.takeRisk();
  }
  catch(BadException ex)
  {
    ex.printStackTrace();
  }
  finally
  {
    turnOvenOff()
  }

5 MIDI

JavaSoundAPI是在Java1.3之后所加入的一组类和接口,放在J2SE的类函数库中。
JavaSound被分为两个部分:MIDI和取样。
MIDI即Musical Instrument Digital Interface,也是不同电子发声装置沟通的标准协议。
可以把MIDI详细成某种乐谱,本身不带有声音,带有的是MIDI播放功能装置的指令。
Sequencer CD播放机
Sequence 单曲CD
Track 单曲
MIDI event 乐符

5个步骤:

//1.获取Sequencer并将它打开
Sequencer player = MidiSystem.getSequencer();
player.open();
//2.创建新的Sequence
Sequence seq = new Sequence(time,4);
//3.从Sequence中创建新的Track
Track t = seq.createTrack();
//4.填入MidiEvent
t.add(myMidiEvent1)
player.setSequence(Seq);
//5.播放
player.start();
import javax.sound.midi.*;

public class MiniMiniMusicApp {
    public static void  main(String[] args){
        MiniMiniMusicApp mini = new MiniMiniMusicApp();
        mini.play();
    }//end main

    public void play(){
        try{
            Sequencer player = MidiSystem.getSequencer();
            player.open();

            Sequence seq = new Sequence(Sequence.PPQ, 4);

            Track track = seq.createTrack();

            ShortMessage a = new ShortMessage();
            a.setMessage(144, 1, 44, 100);
            MidiEvent noteOn = new MidiEvent(a, 1);
            track.add(noteOn);

            ShortMessage b = new ShortMessage();
            b.setMessage(128, 1, 44, 100);
            MidiEvent noteOff = new MidiEvent(b, 16);
            track.add(noteOff);

            player.setSequence(seq);

            player.start();
        } catch (Exception ex){
            ex.printStackTrace();
        }
    }
}

6 MidiEvent

MIDI指令实际上会放在Message对象中
Message描述做什么,MIDIEvent描述何时做

ShortMessage a = new ShortMessage();
//发出44音符
a.setMessage(144, 1, 44, 100);
//在第一拍启动a这个Message
MidiEvent noteOn = new MidiEvent(a, 1);
track.add(noteOn);

a.setMessage(144, 1, 44, 100);
信息类型 144打开 128关闭
频道 1吉他 2贝斯
音符 0-128代表不同音高
音量 0几乎听不到,100普通

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值