zoukankan      html  css  js  c++  java
  • 异常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的值进行压栈,并输出结果

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

  • 相关阅读:
    Zuul转发请求时HttpHostConnectException can't cast to ZuulException问题解决方法
    mysql循环插入千万级数据
    ssh登录原理及免密登录配置
    mysql binlog抽取某个表的数据
    ssh方式请求gitlab需要密码解决方法
    linux使用shell脚本停止java进程
    centos7安装docker-ce
    FutureTask详解
    Boolean.getBoolean用法
    mysql对emoji的支持
  • 原文地址:https://www.cnblogs.com/hong-yu0415/p/9115409.html
Copyright © 2011-2022 走看看