《Head First Java》20201015读书笔记

这篇博客是关于《Head First Java》的读书笔记,主要介绍了如何创建MIDI音乐播放器,包括Sequencer在MIDI播放中的作用。同时,文章详细探讨了Java中的异常处理机制,解释了如何通过try/catch块来捕获和处理异常,强调了编译器对异常处理的要求。
摘要由CSDN通过智能技术生成

P315-P325

《Head First Java》20201015读书笔记

创建MIDI音乐播放器

创建一个声效应用程序,包括BeatBox Drum播放器。
在这里插入图片描述
如何创建Swing GUI、如何通过网络连接到其他计算器,以及让我们可以把数据送出的输入/输出设备。
JavaSound API
JavaSound被分为两个部分:MIDI和取样(sampled)。
MIDI,MusicalInstrument Digital Interface,不同电子发声装置沟通的标准协议。
在程序中,可以把MIDI想象成某种乐谱,可以输入到某种“高级多功能电子魔音琴”中,MIDI本身不带有声音,它带有的是MIDI播放功能装置的指令。
MIDI数据表示执行的动作(播放中央C,以及音量大小和长度等),但没有实际的声音。它并不知道怎样产生钢琴、吉他、鼓的声效,实际的声音是靠装置发出的。

首先需要一个Sequencer

在发出任何声音之前,必须先要取得Sequencer对象。
此对象会将所有的MIDI数据送到正确的装置上,由装置来产生音乐。

import javax.sound.midi.*;//引用该包
public class MusicTest1{
	public void play(){
		Sequencer sequencer = MidiSystem.getSequencer();//这个对象的作用是将MIDI信息组合成“乐曲”
		System.out.println("We got a sequencer");
	}//关闭播放
	public static void main(String[] args){
		MusicTest1 mt = new MusicTest1();
		mt.play();
	}//关闭mian
}//关闭类

在这里插入图片描述

Java使用异常表明调用方法的程序代码有问题

Java的异常处理(exception-handing)机制是个捷径,轻量化的执行期间例外状况处理方式,能够将处理错误状况的程序代码摆在一个容易阅读的位置。
这要依赖你已经知道所调用的方法是有风险的(也就是方法可能会产生异常),因此你可以编写出处理此可能性的程序代码。
如果你知道调用某个方法可能会有异常状况,就可以预先准备好对问题的处理程序,甚至是从错误中恢复。看到该方法的声明有throws语句,就可以得知这个方法会抛出异常。
getSequencer()这个方法可能会在执行期间出问题,所以必须声明出调用它可能会有风险。
编译器要确定你了解所调用的方法是有风险的。

把有风险的程序代码包含在try/catch块中,try/catch块会告诉编译器你确定知道所调用的方法会有风险,并且也已经准备好处理它,它只会注意你有没有表示你会注意到异常。

import javax.sound.midi.*;

public class MusicTest1{
	public void play(){
		try{
			Sequencer sequencer = MidiSystem.getSequencer();//把有风险的程序放在try块
			System.out.println("Successfully got a sequencer");
		}catch(MidiUnavailableException ex){
			System.out.println("Bummer");//用catch块摆放异常状况的处理程序
		}
	}//关闭播放

	public static void main(String[] args){
		MusicTest1 mt = new MusicTest1();
		mt.play();
	}//close main
}//关闭类

在这里插入图片描述
异常是一种Exception类型的对象
“我会try一下这个高级动作,如果失败的话,我也会catch住我自己。”
在这里插入图片描述
方法可以抓住其他方法所抛出的异常。异常总是会丢回给调用方。
会抛出异常的方法必须要声明它有可能会这么做。

在这里插入图片描述
编译器会核对每件事,除了RuntimeExceptions之外。编译器保证:

  1. 如果你有抛出异常,则你一定要使用throw来声明这件事。
  2. 如果你调用会抛出异常的方法,你必须得确认你知道异常的可能性。将调用包在try/catch块中是一种满足编译器的方法。

要点

  • 方法可在运行期间遇到问题时抛出异常。
  • 异常是Exception类型的对象。
  • 编译器不会注意RuntimeException类型的异常。RuntimeException不需要声明或被包在try/catch的块中(可以这么做)。
  • 编译器所关心的是称为检查异常的异常。程序必须要认识有异常可能的存在。
  • 方法可以用throw关键词抛出异常对象:throw new FileIsTooSmallException( );
  • 可能会抛出异常的方法必须声明成throws Excpetion。
  • 如果程序调用了有声明会抛出异常的方法,就得要告诉编译器已经注意到这件事。
  • 如果要处理异常状况,就把调用包在try/catch块中,并将异常处理/恢复程序放在catch块中。
  • 如果不打算处理异常,还是可以正式地将异常给ducking来通过编译,稍后会解释ducking。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值