探索 AutoCloseable接口
来源:互联网 发布:淘宝刷流量掉排名 编辑:程序博客网 时间:2024/05/18 17:27
今天看代码看到了有使用AutoCloseable接口,很好奇它的实现方式,以及在一个try里使用多个的时候他们关闭的先后顺序是怎么样的。
写了个例子,然后反编出来看了下,原来是在编译时候自动加入了close的调用,调用的顺序是写再后面的先close
验证代码:
public class AutoCloseableDemo { static class MyAutoCloseable1 implements AutoCloseable{ @Override public void close() { System.out.println("MyAutoCloseable1 close"); } public void doSomething(){ System.out.println("MyAutoCloseable1 doSomething"); } } static class MyAutoCloseable2 implements AutoCloseable{ @Override public void close() { System.out.println("MyAutoCloseable2 close"); } public void doSomething(){ System.out.println("MyAutoCloseable2 doSomething"); } } public static void main(String args[]) throws InterruptedException { try( MyAutoCloseable1 mc1 = new MyAutoCloseable1(); MyAutoCloseable2 mc2 = new MyAutoCloseable2(); ) { mc1.doSomething(); mc2.doSomething(); } }}
反编出来的代码如下:
Compiled from "AutoCloseableDemo.java"public class AutoCloseableDemo { public AutoCloseableDemo(); Code: 0: aload_0 1: invokespecial #1 // Method java/lang/Object."<init>":()V 4: return public static void main(java.lang.String[]) throws java.lang.InterruptedException; Code: 0: new #2 // class AutoCloseableDemo$MyAutoCloseable1 3: dup 4: invokespecial #3 // Method AutoCloseableDemo$MyAutoCloseable1."<init>":()V 7: astore_1 8: aconst_null 9: astore_2 10: new #4 // class AutoCloseableDemo$MyAutoCloseable2 13: dup 14: invokespecial #5 // Method AutoCloseableDemo$MyAutoCloseable2."<init>":()V 17: astore_3 18: aconst_null 19: astore 4 21: aload_1 22: invokevirtual #6 // Method AutoCloseableDemo$MyAutoCloseable1.doSomething:()V 25: aload_3 26: invokevirtual #7 // Method AutoCloseableDemo$MyAutoCloseable2.doSomething:()V 29: aload_3 30: ifnull 110 33: aload 4 35: ifnull 57 38: aload_3 39: invokevirtual #8 // Method AutoCloseableDemo$MyAutoCloseable2.close:()V 42: goto 110 45: astore 5 47: aload 4 49: aload 5 51: invokevirtual #10 // Method java/lang/Throwable.addSuppressed:(Ljava/lang/Throwable;)V 54: goto 110 57: aload_3 58: invokevirtual #8 // Method AutoCloseableDemo$MyAutoCloseable2.close:()V 61: goto 110 64: astore 5 66: aload 5 68: astore 4 70: aload 5 72: athrow 73: astore 6 75: aload_3 76: ifnull 107 79: aload 4 81: ifnull 103 84: aload_3 85: invokevirtual #8 // Method AutoCloseableDemo$MyAutoCloseable2.close:()V 88: goto 107 91: astore 7 93: aload 4 95: aload 7 97: invokevirtual #10 // Method java/lang/Throwable.addSuppressed:(Ljava/lang/Throwable;)V 100: goto 107 103: aload_3 104: invokevirtual #8 // Method AutoCloseableDemo$MyAutoCloseable2.close:()V 107: aload 6 109: athrow 110: aload_1 111: ifnull 181 114: aload_2 115: ifnull 134 118: aload_1 119: invokevirtual #11 // Method AutoCloseableDemo$MyAutoCloseable1.close:()V 122: goto 181 125: astore_3 126: aload_2 127: aload_3 128: invokevirtual #10 // Method java/lang/Throwable.addSuppressed:(Ljava/lang/Throwable;)V 131: goto 181 134: aload_1 135: invokevirtual #11 // Method AutoCloseableDemo$MyAutoCloseable1.close:()V 138: goto 181 141: astore_3 142: aload_3 143: astore_2 144: aload_3 145: athrow 146: astore 8 148: aload_1 149: ifnull 178 152: aload_2 153: ifnull 174 156: aload_1 157: invokevirtual #11 // Method AutoCloseableDemo$MyAutoCloseable1.close:()V 160: goto 178 163: astore 9 165: aload_2 166: aload 9 168: invokevirtual #10 // Method java/lang/Throwable.addSuppressed:(Ljava/lang/Throwable;)V 171: goto 178 174: aload_1 175: invokevirtual #11 // Method AutoCloseableDemo$MyAutoCloseable1.close:()V 178: aload 8 180: athrow 181: return Exception table: from to target type 38 42 45 Class java/lang/Throwable 21 29 64 Class java/lang/Throwable 21 29 73 any 84 88 91 Class java/lang/Throwable 64 75 73 any 118 122 125 Class java/lang/Throwable 10 110 141 Class java/lang/Throwable 10 110 146 any 156 160 163 Class java/lang/Throwable 141 148 146 any}
阅读全文
0 0
- 探索 AutoCloseable接口
- java IO相关API探索之 AutoCloseable接口
- AutoCloseable接口的使用
- AutoCloseable, Closeable和Flushable接口
- io中的AutoCloseable,Closeable和Flushable接口
- 探究java IO之AutoCloseable,Closeable和Flushable接口
- JDK1.7中新增自动释放资源接口AutoCloseable
- 探究java IO之AutoCloseable,Closeable和Flushable接口
- 探究java IO之AutoCloseable,Closeable和Flushable接口
- java IO之AutoCloseable,Closeable和Flushable接口
- AutoCloseable & Closable
- JDK 1.7 java.io 源码学习之AutoCloseable接口和try-with-resources语法
- IDocHostUIHandler接口探索
- 探索Map接口
- 探索List接口
- AutoCloseable的用法
- AutoCloseable,Closeable和Flushable
- AutoCloseable的作用
- sfasdfsadf
- Python 中的装饰器
- DataGridView的知识
- steam、DOTA2或者steam下的游戏双击没反应怎么解决
- Node.js免费性能监测工具Keymetrics.io
- 探索 AutoCloseable接口
- 学生礼仪常识汇总
- 【Lua】Lua调用C动态库
- 解决Linux下Firefox启动报错找不到配置文件。Your Firefox profile cannot be loaded. It may be missing or inaccessible.
- weblogic忘记用户名或者密码的解决方法
- 常用git命令
- Spring 定时任务之 @Scheduled cron表达式
- 【php笔记-1】获取字符串里中文第一次出现的位置
- python学习笔记.2之列表