异常try...catch...及其相关问题

错误(Error):表示恢复不是不可能可是很困难的状况下的一种严重问题。好比说内存溢出。不可能期望程序能处理这样的状况。java

异常(Exception):表示一种设计或实现问题。也就是说,它表示程序运行正常,从不会发生的状况。ide

错误-----没有经过编译,在编译时出错。spa

异常-----经过编译,在运行中出错。设计

1 try{
2      可能出现异常的代码块
3      return ***4 }catch(异常对象){
5      一旦try中出现了异常则执行
6      return ***7 }finally{
8      不管是否出现异常都会执行  
9 }
View Code

注意:catch块中必须有和try块中return相同类型的return。code

      在一个方法里,return永远是最后一步。对象

           异常最大类:Exception。blog

           全部用native修饰的,调用的都是底层系统的方法,没有方法体。内存

java规范:不容许用异常作流程控制。字符串

finally代码块里的内容何时被执行,在retutn钱仍是在return后?io

先来一段代码:

 1 public class A{
 2      public static int add(int a,int b){
 3           try{
 4                int c=a+b;
 5            System.out.println("try");
 6            return c;
 7           }catch(Exception e){
 8                System.out.println("catch");
 9            return 0;
10       }finally{
11            System.out.println("finally");
12       }
13      }
14      public static void main(String[] args){
15           System.out.println(add(1,2));
16      }
17 }
18 结果:
19 try
20 finally
21 3
View Code

经过反汇编命令javap -c A,能够获得下图:

能够看出,finally中的代码块是在return中间执行的。

下面来讲说正常状况:

1~9:首先把a和b的值压栈,放到操做数栈的栈顶,而后相加,并把结果给了c,接下来把字符串try放到栈顶并输出

12~19:把c的值压栈,放到栈顶,而后再把栈顶的值给了c,而后在把字符串finally放到栈顶并输出

22~23:把c的值进行压栈,并输出结果

 

如有错误之处,欢迎指正。谢谢!

相关文章
相关标签/搜索