[音乐]
现在我们来看一下我们的幻灯片里面
提到的这样的一个异常的例子,以及学习一下我们该如何捕获这样的一个异常。
那我们做一个最简单的例子,就是关于除数为 0
的这样的一个异常, [无声]
[无声] 这是我们第 29 个例子。
[无声] 我们把这个作为一个注释添加进来。
让我们容易查找。
[无声]
那我们把所有代码就写到这个主函数里面。
我们首先声明了一个 a, [无声]
我们首先声明了一个 a,
[无声]
[无声]
我们键盘读入一个数,把它转成这样的一个
整数。
我们再声明了一个 b,
[无声]
[无声] 那么同时我们声明
c= a/b,那么
正如我们已经提到过的,那么我们运行这样的一个简单的例子, 那么当我们给出一个
a 和 b,如果是一个正常的数值的话,譬如讲 2/3
的话, 那么这个不会有什么问题,当然我们没有显示结果。
如果我们再进行这个例子,当我们给的这个除数 b 如果是 0 的话,
那么会看到,就会出现了这样的一个情况, 如果是出现了这样的一个异常,那么尝试除以
0,它出现了这个 DevidedByZeroException 这样的一个异常,
同时我们的这样的一个这东西已经停止了工作,我们也只有按任意键,把它给取消掉。
取消掉。
那么一般情况下如果一个程序出现了异常 的时候,这个异常如果没有被任何处理的话就会直接交到这个
windows 操作系统,那么操作系统就会停止你这样的一个程序的运行, 当然我们已经说了,这是一个不太友好的一个方式,
事实上如果我们对一些错误如果能够把它捕获而不要把它交给 windows
处理的话 那么可以得到更好一些用户的体验。
那么如果要捕获一个异常的话,我们首先要把这样的一个 出异常的这样的一个代码怎么样呢,放到一个 try 的这样的一个块里面来。
放到一个 try 的块里面来。
在这样的一个 try 块里面来,如果这样的一个
会出现了异常,我们也可以把这两句话也放进来,因为我们还要捕获这个格式错误的异常。
我们把它放到这样的一个 try 的块里面来的时候,
[无声]
那么这时候在出现了异常了之后我们就可以通过 一个 catch
语句怎么样呢,捕获这样的一个异常, 那么对于异常来讲,譬如讲我们可以指定一个捕获这样的一个
DividedByZero 这样的一个 Exception,
并且把这样的一个异常,存到什么呢,存到这样的一个 变量里面来,存到一个
divided [无声]
存到一个 dividedByZero 这样的一个变量里面来。
那么捕获了这样的一个异常了之后, 捕获了这样的一个异常了之后,我们就可以怎么样呢,
就可以在我们的这个 catch 里面,怎么样呢,对这样的一个异常进行处理, 譬如讲我们要求怎么样呢,用户进行重新的输入,然后再把它
转到这样的一个 try 语句里面去,重新这样的一个输入,
那么这时我们 同时我们也可以怎么样呢,也可以简单的输出一下我们这样的一个信息,
message, [无声]
[无声]
我们也 可以显示一下它在这个异常的这个变量里面存储的信息,
对吧?我们再来运行一下,我们在这边加上 一个输出,把
c 的值输出就一下,简单的把 c 的值输出一下。
我们再来看一下,我们运行这样的一个程序,如果我们的这个 是这样的一个正确的输出的话,那么
2/3 的结果是 0,对不对? 那么如果我们,如果我们第二个输入
0 的话,那么 尝试除以 0,那么这就是什么呢,这就不再会把这样的一个
异常怎么样,提交给 windows,而是会运行 catch 块里面的语句, 当 catch
块里面的语句怎么样呢,运行完了之后这个程序会正常的结束,正常的结束。
那么如果我们想要让用户重新输入的话,事实上我们可以在这边怎么样呢,在这边增加一个
while [无声]
增加一个布尔变量, 布尔变量
让它等于 true,
然后我们把这个 try 的这个东西怎么样呢,全部放到这个,
全部放到这个while 语句里面来。
那么如果我们, 这个 b 跟这个 b 重名 了,我们把它叫做
怎么这样写,b, 把它重新写一个,起个名字吧,叫
flag, 如果我们这样用户是个正确的输入
的话,我们已经得到了这样的一个 c 的值的话,我们可以让 flag 等于什么呢,等于
false, 我们就,我们就不再运行了,不再运行了,对吧?
如果,如果这时候怎么样呢,如果这时候用户怎么样呢,输入的是一个 0
的话,那么我们显示了怎么样呢,尝试除以 0,然后怎么样呢,可以提示用户,
可以提示用户怎么样,try again,重新输入一下,
重新输入一下,那么这样的一个 形式,对吧?我们保持这个
flag 仍然是一个 true,那么它又会回到了这样的一个 try 语句里面来。
我们再来看一下这个程序。
我们首先输入一个 4,接着再输入一个 2,那么这时候我们得到了一个出的结果是 2,程序正常结束。
如果我们再运行一下结果,我们同样的输入一个 4, 同样我们输入一个 4,然后我们输入一个
0, 对吧?这时候怎么样呢,这时候会告诉你尝试除以 0,是不行的,希望你怎么样呢,
try 还拼错了,我们希望你怎么样,再次输入看,我们可以再次输入一个
4, 然后怎么样,在这时候怎么样呢,在这时候由于我 4 跟 2
怎么样呢,输的时候输入刚才输入的太快了, 忘了按回车,这时候怎么样,这时候导入了一个
输入格式不正常的这样的一个异常,这样的一个异常, 是吧?输入的格式字符串不正确,因为
4 空格 2 这样字符串 没有办法转换成什么呢,转换成一个
整数,好了我们把这个拼错的单词改一下。
我们再来看一下,4 0
不正确,再输,4 2,正确输入,结束。
那么我们会看到刚才我们还有一个如果输入格式 的不正常,那么也不对,那么它又是另外的一个异常了,
那么怎么样呢,我们还可以再次,在一个 catch 在一个 try 后面可以接有多个 catch
的块, 我们除了可以这样捕获这样的一个 dividedByZero 这样的一个
catch 块的话怎么样呢, 我们仍然怎么样呢,还可以捕获什么呢,还可以捕获譬如讲这个格式不正常的这样的一个
这样的一个异常,格式不正常的异常是 format
exception,format exception。
[无声] format
[无声] formatException,我们把它存储到这样的一个变量里面来,
那么在这样的一个 catch 块里面怎么样呢,我们仍然可以怎么样,仍然可以输入这样的一个
输出这样的一个信息之后怎么样,让用户怎么样呢,再一次重新尝试什么呢
重新尝试怎么样,进行输入,进行输入。
我们再来 ctl f5,运行一个这个程序。
如果我这时候的格式怎么样呢,譬如 讲我的输入是不正常的,该输入一个整数的时候我输了一个字符,对吧?
那么它会提示什么呢,输入字符串的格式不正确,try again, 再一次的输入,4,这是对的,然后怎么样呢,
如果我再次输入的格式不正确的话,那么又会提示输入的格式不正确,直到什么呢,
直到我们两次输入的格式都正确的话,程序怎么样呢,会正确的结束。
这样的话,通过我们 try catch 这样的一个方式怎么样呢
我们就可以怎么样呢,我们就可以 把异常自己捕获下来,进行自己的这样的一个 处理。
那么这就是这样的一个 try catch 异常的最最这样的一个
最简单的这样的一个用法吧,可以应该这样说。
我们先示例到这里。