• trycatchfinally


    1、若在 finally 中使用 return,那么即使 try-catch 中有 return 操作,也不会立马返回结果,而是再执行完 finally 中的语句再返回。此时问题就产生了:如果 finally 中存在 return 语句,则会直接返回 finally 中的结果,从而无情的丢弃了 try 中的返回值。

    2、finally中的代码“非最后”执行

    public static void main(String[] args) throws FileNotFoundException {
        execErr();
    }
    private static void execErr() {
        try {
            throw new RuntimeException();
        } catch (RuntimeException e) {
            e.printStackTrace();
        } finally {
            System.out.println("执行 finally.");
        }
    }

    ======》e.printStackTrace 

    当执行 e.printStackTrace()  和 finally 输出信息时,使用的并不是同一个对象。finally 使用的是标准输出流:System.out,而 e.printStackTrace()  使用的却是标准错误输出流:System.err.println

    标准错误输出流(System.err)和标准输出流(System.out)使用的是不同的流对象,即使标准输出流并定位到其他的文件,也不会影响到标准错误输出流。那么我们就可以大胆的猜测:二者是独立执行的,并且为了更高效的输出流信息,二者在执行时是并行执行的,因此我们看到的结果是打印顺序总是随机的。

    3、finally中的代码“不执行”

    • 在 try-catch 语句中执行了 System.exit;
    • 在 try-catch 语句中出现了死循环;
    • 在 finally 执行之前掉电或者 JVM 崩溃了。

    public static void main(String[] args) {
        noFinally();
    }
    private static void noFinally() {
        try {
            System.out.println("我是 try~");
            System.exit(0);
        } catch (Exception e) {
            // do something
        } finally {
            System.out.println("我是 fially~");
        }
    }

  • 相关阅读:
    资产 = 负债 + 所有者权益
    并发编程四(3) 线程同步
    并发编程四(2) 线程同步
    并发编程四(1) 线程同步
    并发编程(三) 线程互斥
    并发编程(二)multiprocessing.dummy.Pool
    并发编程(一)

    mysql 存储过程演示造数据
    vue系列 箭头函数和this
  • 原文地址:https://www.cnblogs.com/KL2016/p/14715755.html
Copyright © 2020-2023  润新知