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

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

          下面看一個例子: 
           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

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


          網站導航:
           
          主站蜘蛛池模板: 固阳县| 台北市| 揭阳市| 确山县| 江北区| 甘洛县| 淮安市| 凤庆县| 吉水县| 九龙县| 吉木萨尔县| 大邑县| 左云县| 阿拉善盟| 阳东县| 西畴县| 西峡县| 南靖县| 肇庆市| 醴陵市| 塔河县| 德令哈市| 阜新市| 香格里拉县| 文山县| 河源市| 宿松县| 米泉市| 中江县| 临城县| 安乡县| 科尔| 株洲市| 澄江县| 娄烦县| 吴川市| 奎屯市| 平谷区| 赤城县| 历史| 哈密市|