Head First Java笔记集:异常处理

今天刚看完的异常处理,趁热打铁。
书上这一章是从做一个播放器引入,因为会用到一个getSequencer方法,该方法是会抛出异常的,于是引入异常处理之类云云。
之前学JAVA的时候throw,try,catch的概念很混淆,仅仅停留在了样式大概上。
这次看完清楚一点了,但是做书后练习的时候还是有一点懵逼。

下载了印象笔记的手机客户端版,终于想起来就算我身边没电脑,看书的时候也要记一记。
之前是在地铁上看的都没有做记录,结果复习起来很累,需要重头看这一章节。
结果今天突然发现异常处理的章节没有同步到印象客户端上。。。
听了朋友的建议准备转战为知笔记,为知笔记有个代码显示功能我比较中意


 

下面是异常处理部分的笔记:

JAVA的异常处理机制是个简洁、轻量化的执行期间例外状况处理方式,它能够将处理错误状况的程序代码摆在一个容易阅读的位置
->必须依赖你已经知道所调用的方法是有风险的

某个方法会抛出异常 -> 该方法的声明有throws语句

编译器要确定你了解所调用的方法是有风险的 -> try/catch -> try 一下 ,出错了就就catch住

异常也是对象 -> Exception类型 – > Exception类型的对象可以是任何它的子类的实例

异常是有风险的方法抛出的,你如果需要调用这个有风险的方法,一旦发生异常,这个方法就要抛异常给你了

抛出异常 -> 用throw来声明
调用抛出异常的方法 -> 将调用包在try/catch块中,来满足编译器

编译器不检查RuntimeException的子类。 RuntimeException不需要声明或被包在try/catch的块中(这么做不会报错但是太傻了)

finally块是用来存放不管有没有异常都得执行的程序
try失败-> 抛出异常 -> 流程到catch块 -> catch块完成,执行finally块 -> finally块完成,继续执行其余部分
try成功 -> 跳过catch执行finally -> 继续
如果try或者catch有return指令,finally还是会执行 – > 先跳到finally然后再回到return指令

方法可以抛出多个异常,声明时必须把所有可能的异常都检查了(多个异常有共同的父类时,可以只声明该父类)

异常是对象,也能以多态方式引用

为每个需要单独处理的异常编写不同的catch, 处理方法相同的可以用同一个catch块 -> 用父类的名字调用
-> 所以范围小的要先上,不然根本就没机会用到

不想处理异常 -> duck掉 (duck :躲避,回避
-> 如果遇到调用方式一个ducker,那么异常会抛给调用方的上方的方法(专业踢皮球)
如果一直没有愿意来处理的方法,那JAVA虚拟机只好死给你看了

如何duck?
1.声明会抛出异常
2.没有try/catch块
3.duck掉异常留给调用方

异常处理规则:
1.catch与finally不能没有try
2.try与catch 之间不能有程序
3.try一定要有catch或finally
4.只带有finally的try还需要声明异常

void go() throws FooException {
    try {
        x.doStuff();
    }finally { }
}

在结束了异常处理的学习之后,书内回到主线:制作一个播放器。

JavaSound工作原理:

1. 发声的装置:Sequencer
2. 要演奏的乐曲:Sequence
3. 带有乐曲信息的记录:Track
4. 乐曲的音符等信息 : MIDI event

1. 取得Sequencer并将它们打开

Sequencer player = MidiSystem.getSequencer();
player.open();

4. 创建新的Sequece

Sequence seq = new Sequence(timing,4);

6. 从Sequence中创建新的Track

Track t = seq.createTrack();

8. 填入MidiEvent并让Sequencer播放

t.add(myMidiEvent1); player.setSequence(seq);

10. 按下Play键播放

player.start();

Message信息的格式:

a.setMessage(144, 1, 44, 100);

信息类型:144->打开 128->关闭
频道:不同的演奏者
要发出的音符:0~127代表不同音高
音道:用多大的力气按下音符? 0几乎听不到,100差不多可以


 

运行成功之后产生了一个异常:

Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(…) returned error code 5

解决方法:
  1. 打开REGEDIT.EXE。
  2. 然后找到HKEY_LOCAL_MACHINE \ SOFTWARE \ JavaSoft
  3. 右键单击权限,然后更改权限为完全许可即可。
  4. 由于使用的是解压版的JDK,所以多加一步:在LOCAL_HOST_MACHINE\SOFTWARE下创建节点,根据操作系统是64bit还是32bit,分别在SOFTWARE节点或者Wow6432Node下添加JavaSoft/Prefs两节点,再设置权限

顺便向小天学习了一个CMD卡死的时候恢复的方法: Ctrl + C

因为笔记本已经是三年龄的老机子了,更新了WIN10之后小娜对我的电脑形成了一定的负担。所以顺手查了一下怎么关小娜:

WIN10下关闭Cortana :
因为我只想把左下角当成我的快速搜索入口,被微软不知不觉开启小娜之后每次点击都会耗费一定的内存空间,甚至今天发生了卡死状态。
设置-隐私-语音、墨迹书写和键入-停止收集有关我的信息
情不自禁学了好多,其实写博客的时候还get到了在博客中高亮代码的功能,下次有空可以写一写。

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据