類開始加載到運行要經過以下幾個步驟:

          加載:查找并加載類的二進制數據(加載到內存中) 
          連接 
              驗證:確保被加載的類的正確性 
              準備:為類的靜態變量分配內存,并將其初始化為默認值 
              解析:把類中的符號引用轉換為直接引用 
          初始化:為類的靜態變量賦予正確的初始值(用戶賦予的值) 

          下面看一個例子: 
           1 package com.naxsu.jvm;
           2 class Singleton {
           3 //    private static Singleton singleton=new Singleton();//放在前面,輸出1和0
           4     public static int count1;
           5     public static int count2 = 0;
           6     private static Singleton singleton=new Singleton();//放在后面,輸出1和1
           7 
           8     private Singleton() {
           9         count1++;
          10         count2++;
          11     }
          12     
          13     public static Singleton getInstance(){
          14         return singleton;
          15     }
          16 
          17 }
          18 
          19 public class MyTest {
          20     public static void main(String[] args) throws ClassNotFoundException {
          21         Singleton singleton= Singleton.getInstance();
          22         System.out.println(singleton.count1);
          23         System.out.println(singleton.count2);
          24     }
          25 }

          我們來分析一下這個類的運行過程:

          1.       Singleton類的二進制數據被加載到內存中。

          2.       驗證類的正確性

          3.       count1count2為配內存,為都賦予默認值0singleton =null

          4.        

          放在前面那種情況,singleton =new Singleton(),count1count2都為1,然后給靜態變量賦予正確的初始值,這里用戶給count2初始化的值是0,所以最后輸出是10

          給靜態變量賦予正確的初始值,這里用戶給count2初始化的值是0singleton =new Singleton()count1count2都為1,所以最后輸出是11

           

          更多資源請訪問:http://bbs.naxsu.com

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 施秉县| 合肥市| 和顺县| 徐水县| 疏勒县| 自治县| 双城市| 云南省| 武平县| 当雄县| 偏关县| 壶关县| 杭州市| 宁河县| 柳林县| 长子县| 甘德县| 海晏县| 昌宁县| 南汇区| 泾源县| 荥经县| 峡江县| 比如县| 勃利县| 万州区| 行唐县| 长汀县| 江油市| 新竹市| 福安市| 凤冈县| 南涧| 襄垣县| 崇仁县| 霞浦县| 禹城市| 登封市| 高密市| 老河口市| 库车县|