<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Java中雙括號初始化是個什么操作

      最近在閱讀Mybatis源碼的時候,看到了一種原來很少見到的語法:

      public class RichType {
                                              
        ...
                              
        private List richList = new ArrayList() {
          {
            add("bar");
          }
        };
                                              
      }
      

      查了一下資料,補足了自己的一個知識盲區,嘻嘻。

      一. 什么是Java雙大括號初始化?

      通常情況下,初始化Java集合并向其中添加幾個元素的步驟如下:

      public class RichType {
                                              
        ...
                              
        private List richList;
      
        public RichType(){
        	richList = new ArrayList();
        	richList.add("bar");
        }
                                              
      }
      

      或者我們可以在靜態初始化塊中向作為靜態變量的集合添加元素:

      public class RichType {
                                              
        ...
                              
        private static List richList = new ArrayList();
      
        static{
        	richList.add("bar");
        }
                                              
      }
      

      從語法上來看,這樣的初始化方法雖然格式清晰明了,但語法上略顯冗余。事實上,Java允許一種精簡的雙大括號初始化方法:

      List richList = new ArrayList() {
          {
            add("bar");
          }
      };
      

      二. 語法解讀

      實際上上述語法可以拆為兩個部分,第一部分是創建了一個繼承于ArrayList的匿名內部類:

      List richList = new ArrayList() {
      
      };
      

      第二部分,是在匿名內部類中指定了一個初始化塊,并在初始化塊中調用對象本身的add方法添加元素:

      List richList = new ArrayList() {
          {
            add("bar");
          }
      };
      

      這里需要回顧一下類的初始化方式,在Java中一個類和實例的初始化可以有三種方式:

      • 靜態初始化塊:靜態初始化塊只在類加載時執行一次,同時靜態初始化塊只能給靜態變量賦值,不能初始化普通的成員變量。
      • 初始化塊:非靜態初始化塊在每次初始化實例對象的時候都執行一次,可以給任意變量賦值。
      • 構造方法:在每次初始化實例對象時調用。

      初始化塊的順序

      1. 在加載類時執行一次靜態初始化塊(之后不再調用)。
      2. 在每次初始化實例對象時:先執行非靜態初始化塊,
      3. 再執行構造方法。

      三. 效率問題和產生的.class文件結構

      利用雙大括號初始化集合從效率上來說可能不如標準的集合初始化步驟。原因在于使用雙大括號初始化會導致內部類文件的產生,而這個新的.class文件產生就會導致需要再次進行類加載的操作,會影響最終效率。

      posted @ 2020-04-10 10:55  聽到微笑  閱讀(33)  評論(0)    收藏  舉報  來源
      主站蜘蛛池模板: 一区二区三区无码视频免费福利| 国产精品第一页中文字幕| 国产午夜福利小视频合集 | 精品亚洲女同一区二区| 开心久久综合激情五月天| 在线一区二区中文字幕| 亚洲熟妇自偷自拍另类| 日本美女性亚洲精品黄色| 欧美日韩高清在线观看| 日日摸夜夜添夜夜添国产三级| 东北妇女精品bbwbbw| 激情五月天一区二区三区| 亚洲精品香蕉一区二区| 在线国产精品中文字幕| 亚洲成a人无码av波多野| 国产精品高清一区二区不卡| av午夜福利一片免费看久久| 日本va欧美va欧美va精品| 国产裸体永久免费无遮挡| 天津市| 可以在线观看的亚洲视频| 翘臀少妇被扒开屁股日出水爆乳| 亚洲人成网站免费播放| 人妻少妇无码精品视频区| 色综合天天综合天天综| 国产精品国产亚洲区久久| 极品少妇无套内射视频| 色窝窝免费播放视频在线| 久久大香萑太香蕉av黄软件| 2021av在线| 国内在线视频一区二区三区| 镇原县| 国产精品色内内在线播放| 欧美寡妇xxxx黑人猛交| 国产成人一区二区免av| 无套内谢少妇一二三四| 亚洲国产精品久久一线不卡| 精品国产成人亚洲午夜福利| 亚洲人成电影网站 久久影视| 太谷县| 国产色视频一区二区三区|