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

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

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

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

异常-----通过编译,在运行中出错。

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

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

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

           异常最大类:Exception。

           所有用native修饰的,调用的都是底层系统的方法,没有方法体。

java规范:不允许用异常做流程控制。

finally代码块里的内容什么时候被执行,在retutn钱还是在return后?

先来一段代码:

 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的值进行压栈,并输出结果

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

原文地址:https://www.cnblogs.com/hong-yu0415/p/9115409.html