国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Java7,AutoClosable

2019-11-14 22:58:33
字體:
來源:轉載
供稿:網友
java7,AutoClosable

Java 7的try-with-resource語法的目的是提高Java開發人員的效率,使得他們不需要在編寫代碼時考慮資源釋放問題,大多數的這類"清理"問題是由于異常發生時清理方法沒有被調用產生。

準備
  • 3個異常:
class OpenException extends Exception{} class SwingException extends Exception{} class CloseException extends Exception{}
  • OpenDoor類

構造函數會拋出OpenException,swing()方法會拋出SwingException,close方法會拋出CloseException。

class OpenDoor implements AutoCloseable { public OpenDoor() throws Exception { System.out. }}
  • 可執行的TryWithResources類
public class TryWithResources { public static void main(String[] args) throws Exception { try ( OpenDoor door = new OpenDoor() ) { door.swing(); } catch (Exception e) { System.out.println("Is there a draft? " + e.getClass());//注意e.getClass() } finally { System.out.println("I'm putting a sweater on, regardless. "
);    }  }}

運行上面的代碼,如果沒有拋出異常的話,輸出應該是這樣的:

The door is open. The door is becoming unhinged. The door is closed. I'm putting a sweater on, regardless.

三個異常目前被注釋掉了,現在讓我們一個個的拋出他們。

開始
  • 在'try-with-resource'初始化代碼塊的異常(構造函數拋出)

如果OpenDoor的構造函數拋出異常時會發生什么?close()方法是否還會被自動調用?讓我們來試一下就知道了,去掉構造函數中異常代碼的注釋:

public OpenDoor() throws Exception { System.out.println("The door is open."); throw new
 OpenException();}

代碼打印的結果如下:

The door is open. Is there a draft? class OpenException I'm putting a sweater on, regardless.

可以看到,當構造函數拋出異常時try-with-resource代碼體部分的代碼沒有被執行。當聲明資源時,如果有異常拋出,可以認為資源并未正確初始化,所以并需要釋放資源。然而,需要注意的時,如果其他資源已被正確初始化,那么還是會按照聲明相反的順序調用那些資源的close()方法。

  • try-with-resource代碼塊中拋出的異常

如果在swing方法中拋出異常,會發生什么呢?

The door is open. The door is becoming unhinged. The door is closed. Is there a draft? class SwingException I'm putting a sweater on, regardless.

從上面的輸出我們可以了解到:

  1. OpenDoor的構造方法被調用了,第一行輸出
  2. OpenDoor的swing方法也被調用了,第二行輸出
  3. 拋出了SwingException
  4. close方法被調用,第四行輸出
  5. 異常被catch塊捕獲,第五行輸出
  6. 執行finally代碼塊,地六行輸出。

只是try-with-resources代碼塊的標準行為,盡管會使人很困惑:什么時候會執行close方法?規則是:任何AutoCloseable對象的close方法會在任何catch塊代碼之前被執行。

  • 在AutoCloseable對象的close方法中拋出異常
The door is open.The door is becoming unhinged.The door is closed.Is there a draft? class CloseExceptionI'm putting a sweater on, regardless.
我是天王蓋地虎的分割線

參考:http://www.4byte.cn/learning/84919/java-7-xin-te-xing-zi-dong-zi-yuan-guan-li-arm-he-autoclosable-jie-kou-jiao-cheng.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 齐齐哈尔市| 泰顺县| 黔西| 慈利县| 新巴尔虎左旗| 紫金县| 梨树县| 望谟县| 石屏县| 大方县| 洱源县| 稷山县| 普兰店市| 珠海市| 黄石市| 兴隆县| 鄯善县| 旺苍县| 沁阳市| 贺兰县| 洛阳市| 巴彦淖尔市| 乌鲁木齐县| 邻水| 郸城县| 景东| 邵武市| 大姚县| 巴中市| 策勒县| 兰州市| 隆德县| 长顺县| 渭南市| 边坝县| 平乐县| 永城市| 扶风县| 军事| 庆元县| 都江堰市|