• Java 高阶 —— try/catch


    // try catch 在 for 循环外
    try 
    {
        for(int i = 0; i < max; i++) 
        {
            String myString = ...;
            float myNum = Float.parseFloat(myString);
            myFloats[i] = myNum;
        }
    } 
    catch (NumberFormatException ex) 
    {
        return null;
    }
    
    // try catch 在 for 循环内
    for(int i = 0; i < max; i++) 
    {
        String myString = ...;
        try 
        {
            float myNum = Float.parseFloat(myString);
        }
        catch (NumberFormatException ex)
        {
        return null;
        }
        myFloats[i] = myNum;
    }
    

    1. 功能上的区别

    • 异常发生时,
      • try catch 在循环外,循环直接退出,相当于 break;
      • try catch 在循环内,异常捕获,继续执行,相当于 continue;

    2. 性能上

    Java上的try catch并不影响性能(转)

    先说结论,未有异常发生时,二者性能上几乎没有差别。

    • try catch 关键字在编译器级别上的实现原理:

      1、类会跟随一张 异常表(exception table),每一个try catch都会在这个表里添加行记录,每一个记录都有4个信息(try catch的开始地址,结束地址,异常的处理起始位,异常类名称)。

      2、当代码在运行时抛出了异常时,首先拿着抛出位置到异常表中查找是否可以被catch(例如看位置是不是处于任何一栏中的开始和结束位置之间),如果可以则跑到异常处理的起始位置开始处理,如果没有找到则原地return,并且copy异常的引用给父调用方,接着看父调用的异常表。。。以此类推。

    • 可得出如下结论:

      1、异常如果没发生,也就不会去查表,也就是说你写不写try catch 也就是有没有这个异常表的问题,如果没有发生异常,写try catch对性能是木有消耗的,所以不会让程序跑得更慢。

      2、try 的范围大小其实就是异常表中两个值(开始地址和结束地址)的差异而已,也是不会影响性能的。

  • 相关阅读:
    computed 和 watch 的区别和运用的场景?
    yarn window安装包地址
    说说你对SPA(单页应用)的理解?
    Java基础:并发小结
    疫情数据
    浅谈外挂常识和如何防御
    深度确定性策略梯度(DDPG)
    毕业设计项目介绍:面向海量小文件数据存储平台
    uniappvue和微信小程序的区别、比较 (基础)
    uniapp白话及入门
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9421124.html
Copyright © 2020-2023  润新知