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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Java闭包概念

發布時間:2023/12/31 综合教程 25 生活家
生活随笔 收集整理的這篇文章主要介紹了 Java闭包概念 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

閉包又稱詞法閉包

閉包最早定義為一種包含<環境成分>和<控制成分>的實體.

解釋一:閉包是引用了自由變量的函數,這個被引用的變量將和這個函數一同存在。

解釋二:閉包是函數和相關引用環境組成的實體。

注:<自由變量>:除了局部變量的其他變量

簡單理解:閉包能夠將一個方法作為一個變量去存儲,這個方法有能力去訪問所在類的自由變量。

Java中閉包實現

關鍵點:

如何用變量去存儲方法?

java中能夠保存方法的變量指的就是普通的對象

如何讓這個普通對象能夠訪問所在類的自由變量?

純天然的解決辦法是:內部類。內部類能夠訪問外部類的所有屬性及方法。

隱藏具體實現是內部類的作用之一,如何保證隱藏具體實現的同時還能將閉包傳遞到外部使用?

讓內部類實現通用接口,然后將內部類對象向上轉型為接口類型。

上述解決辦法就是Java最常用的閉包實現辦法(內部類+接口)

下面提供一個簡單的實現

 1 public class Milk {
 2     
 3     public final static String name = "純牛奶";//名稱
 4     
 5     private static int num = 16;//數量
 6     
 7     public Milk()
 8     {
 9         System.out.println(name+":16/每箱");
10     }
11     
12     /**
13      * 閉包
14      * @return 返回一個喝牛奶的動作
15      */
16     public Active HaveMeals()
17     {
18         return new Active()
19                 {
20                     public void drink()
21                     {
22                         if(num == 0)
23                         {
24                             System.out.println("木有了,都被你丫喝完了.");
25                             return;
26                         }
27                         num--;
28                         System.out.println("喝掉一瓶牛奶");
29                     }
30                 };
31     }
32     
33     /**
34      * 獲取剩余數量
35      */
36     public void currentNum()
37     {
38         System.out.println(name+"剩余:"+num);
39     }
40 }
41 
42 /**
43  * 通用接口
44  */
45 interface Active
46 {
47     void drink();
48 }

使用上述實現

 1 public class Person {
 2 
 3     public static void main(String[] args) {
 4         //買一箱牛奶
 5         Milk m = new Milk();
 6         
 7         Active haveMeals = m.HaveMeals();
 8         
 9         //沒事喝一瓶
10         haveMeals.drink();
11         //有事喝一瓶
12         haveMeals.drink();
13         
14         //看看還剩多少?
15         m.currentNum();
16     }
17 
18 }
19  

運行結果

純牛奶:16/每箱
喝掉一瓶牛奶
喝掉一瓶牛奶
純牛奶剩余:14 

上述例子中,通過調用Active的方法實現對Milk私有變量num進行修改。

總結

1.實際項目中沒怎么用過閉包,因此不能對他的好壞進行評論。

2.建議合理的使用閉包,不完全不使用,也不能濫用。

3.特別注意:閉包會導致資源不被回收,如上例,在main方法中將m設為null,使用haveMeals繼續調用drink方法仍然會喝掉一瓶牛奶,說明Milk對象并沒有被釋放掉。

總結

以上是生活随笔為你收集整理的Java闭包概念的全部內容,希望文章能夠幫你解決所遇到的問題。

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