日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java中closeable_java的Closeable接口和Cloneable接口

發布時間:2023/12/31 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中closeable_java的Closeable接口和Cloneable接口 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概述

java的Closeable和Cloneable兩個接口,一字之差,但是要完成的功能卻基本沒有什么聯系。最大的相同點在于,這兩個就是java基本類庫有特殊處理的接口,不按規則來,加班兩行淚。

Closeable接口

概念

Closeable是可以關閉的數據源或目標。調用close方法可釋放對象保存的資源(如打開文件)。

原理

這個實現是靠規則來保證的。實現類必須保證需要有資源釋放,并且調用close接口可以實現資源的釋放。

應用

在網上看到很多OkHttp來進行http請求的例子,里面的Response都沒調用close方法進行關閉。將例子拷貝下來壓測發現,會偶爾出現下面的告警:

[WARN] OkHttp ConnectionPool OkHttpClient? A connection to XXX was leaked. Did you forget to close a response body? To see where this was allocated, set the OkHttpClient logger level to FINE: Logger.getLogger(OkHttpClient.class.getName()).setLevel(Level.FINE);

并且部分請求沒有得到響應。

調整程序,實用try-with-resource方法關閉連接后,問題解決。這就是典型的資源沒釋放引起問題的例子。

在JDK1.7之后,只要實現了AutoCloseable或者Closeable接口的類或接口,都可以使用try-with-resource來實現異常處理和資源關閉。這種方法比手動在try外面定義資源,finally里調用close手動關閉資源代碼更優雅。

Cloneable接口

概念

Cloneable接口是一個標記接口,里面沒有定義任何內容。主要是和Object的clone方法配合使用。如果沒有實現這個接口,而調用了clone方法,會拋出CloneNotSupportException。

原理

這個方法是為了彌補Object的clone方法缺陷。Object默認是淺拷貝。也就是說它并不會把對象的所有屬性拷貝一份,而是有選擇性的拷貝。拷貝規則如下:

1.基本類型,值拷貝。2.字符串類型,生成新對象,類似值拷貝。3.對象,地址引用拷貝。這樣做的優點是節約內存。但是為了確保用戶使用的時候,是了解自己用的什么拷貝,必須實現Cloneable接口。

應用

很多時候,我們需要實現深拷貝,比如需要每一份拷貝都對值做一定修改。這樣深拷貝可避免對原值造成影響。

實現深拷貝,從代碼上有兩個比較簡單的方法。一個是利用序列化和反序列化SerializationUtils.clone方法。還可以用apache的common包中的BeanUtils. copyProperties來實現。

總結

以上是生活随笔為你收集整理的java中closeable_java的Closeable接口和Cloneable接口的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。