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

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

  • 相关阅读:
    Atitit. 查找linux 项目源码位置
    Atitit.用户权限服务 登录退出功能
    Atitit.js javascript的rpc框架选型
    Atitit.php  nginx页面空白 并返回500的解决
    Atitit .linux 取回root 密码q99
    Atitit.报名模块的管理
    Atitit.基于时间戳的农历日历历法日期计算
    Atitit.excel导出 功能解决方案 php java C#.net版总集合.doc
    我的博客开通了
    (转)列举ASP.NET 页面之间传递值的几种方式
  • 原文地址:https://www.cnblogs.com/hong-yu0415/p/9115409.html
Copyright © 2011-2022 走看看