Java 基础之异常捕获

  • Java,基础,异常捕获

对于初学者,先学习捕获异常,先不研究怎么产生异常。在 Java 里,捕获异常很简单,就是 try{}catch(){}。大概的语法如下

try{
    // do somethings    
}catch(AException a){
    // do somethings
}catch(BException b){
    // do somethings 
}finally{

}
  • try 里面放的就是你要执行的代码,这里面可能会抛出异常,所以叫 try 。

  • catch 就是捕获,如果try 里有异常抛出,那么程序就从抛出异常的那一行中止,然后进入到catch 的代码块里。这里要对异常进行处理。如果要执行的代码块可能抛出不止一种 Exception 的话,可以有多个 catch 的语句块进行捕获的。比如你读一个文件,可能获得到的异常会是文件不存在,或者文件存在但是没有读权限,或者你读文件的过程中文件被移除了,IO 流突然断开了等等。那么你可以分别去捕获这些异常,然后作出不同的处理,至少可以给用户或者调用者更多的提示。捕获的顺序是从上到下,像例子里的,抛出一个异常,先判断是不是 AException 如果是,进入 A 的代码块里,如果不是,往下判断 BException ,如果是进入,如果不是,下一个。如果都没有处理,那么异常会抛到使用这个语句块的语句块里(有点绕,下面会解释)。既然是从上到下的,那么如果两个异常是父子类关系,那么子类肯定得写在上面了。

  • finally 里的语句块主要负责收尾工作的。不管 try 里的代码最终有没有抛出异常,有没有提前结束, finally 的语句都是会被执行的。特别注意的是,如果 try 语句块里有 return 的话,那么程序也会先进入 finally 里,然后再 return 的。

如果在一个代码块里,有一个异常抛出,但是你没有捕获到,那么异常会继续抛到包含这些代码块的代码块里。比较 方法A 调用 方法B ,方法B 里抛出了一个异常,但是方法B 没有捕获,那么这个异常就抛到了方法A ,方法A 也没有捕获这个异常,那么这个异常就继续往调用方法A 的方法里抛,直到有人 catch 住这个异常。如果没人捕获这个异常,最终捅到虚拟机那了,那后果很严重的说。代码块和方法是一个意思,也就是其他 try 是可以有嵌套的,只是平时不那么写。

- EOF -

本文链接 https://binkery.com/archives/436.html,欢迎转载,转载请注明出处。