<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    大漠駝鈴

    置身浩瀚的沙漠,方向最為重要,希望此blog能向大漠駝鈴一樣,給我方向和指引。
    Java,Php,Shell,Python,服務器運維,大數據,SEO, 網站開發、運維,云服務技術支持,IM服務供應商, FreeSwitch搭建,技術支持等. 技術討論QQ群:428622099
    隨筆 - 238, 文章 - 3, 評論 - 117, 引用 - 0
    數據加載中……

    Java常見筆試面試題目解析(三): Java中的靜態變量的執行順序

    public class StaticVariableTest {
        
    private static StaticVariableTest svt = new StaticVariableTest();//語句(1)
        private static int count1;//語句(2)
        private static int count2 = 0;//語句(3)
        
        
    private StaticVariableTest(){//語句(4)
            count1++;
            count2
    ++;
        }
        
    public static StaticVariableTest getInstance(){//語句(5)
            return svt;
        }
        
    public static int getCount1() {
            
    return count1;
        }
        
    public static void setCount1(int count1) {
            StaticVariableTest.count1 
    = count1;
        }
        
    public static int getCount2() {
            
    return count2;
        }
        
    public static void setCount2(int count2) {
            StaticVariableTest.count2 
    = count2;
        }
        
    public static void main(String[] args) {
            StaticVariableTest svt 
    = StaticVariableTest.getInstance();//語句(6)
            System.out.println("count1:" + svt.getCount1());//語句(7)
            System.out.println("count1:" + svt.getCount2());//語句(8)
        }
    }
    問題:當執行完語句(7)(8)時,打印結果分別是什么?為什么?
    解答:當執行完語句(7)時,打印結果是1,當執行完語句(8)時,打印結果是0。分析:程序執行從main方法開始,首先執行語句(6),調用 getInstance方法,然而當它去調用這個方法的時候,它是一個靜態的方法,在這個類里面定義了多個靜態的成員變量。根據java初始化的順序我們 知道,對于靜態的內容肯定是先執行的,也就是說在執行getInstance方法之前,肯定先執行private static StaticVariableTest svt = new StaticVariableTest();而且它是從上到下分別執行靜態的內容。換句話說,這個程序首先執行private static StaticVariableTest svt = new StaticVariableTest();而這里面又要調用一個構造方法StaticVariableTest(),則去執行這個構造方法 private StaticVariableTest(),執行這個構造方法時發現它里面的功能是將count1加1,將count2加1,而這個count1和 count2是我們定義的int類型的靜態變量。根據java對成員變量的默認值,count1和count2初始化的時候都被設置為0,當執行完構造方 法后count1和 count2都等于1,這時StaticVariableTest這個對象就生成了,已經在內存里面存在了。接著賦給svt這個引用。那么svt這個引用 指向的StaticVariableTest類型的對象,它里面的count1是1,count2也是1。接著發現下面一行private static int count1;它是一個靜態的,那么它要執行這行代碼,這行代碼只是一個聲明,但是沒有賦值,接著它就跳過這行不再賦值了(究其原因是因為count1已 經被賦值了,已經被加1了,也就是count1為1)。當我執行private static int count2 = 0;時發現count2也是一個靜態變量,而且有一個顯示的去賦值的這樣一個動作。我們知道count2已經被賦值1了,但是這兒有一個顯示的賦值的動 作,就把count2的值由1改變成了0。這個就是調用getInstance方法時程序的執行流程:語句(6)、語句(5)、語句(1)、語句(4)、 語句(2)、語句(3)

    思考:如果將語句(2)和語句(3)放在語句(1)前面,當執行完語句(7)時,打印結果是1,當執行完語句(8)時,打印結果是1,想想是為什么?  

    總結:靜態變量的執行順序是按照它們定義在類里面的先后順序,按照從上到下來執行的。

    posted on 2009-02-28 10:57 草原上的駱駝 閱讀(718) 評論(0)  編輯  收藏 所屬分類: 其它

    主站蜘蛛池模板: 无码国产精品一区二区免费3p| caoporm超免费公开视频| 99久久久国产精品免费牛牛| 亚洲精品二区国产综合野狼| 国产区在线免费观看| 亚洲日韩国产一区二区三区| 无码人妻一区二区三区免费视频| 亚洲 无码 在线 专区| 免费无码午夜福利片 | 最近中文字幕无免费| 亚洲综合在线观看视频| 蜜桃成人无码区免费视频网站 | 国产午夜亚洲精品不卡免下载| 免费观看a级毛片| 黄色a三级免费看| 国产亚洲精品拍拍拍拍拍| 国产精品成人免费观看| 日韩亚洲欧洲在线com91tv| 日本xxxx色视频在线观看免费| 亚洲天堂中文字幕在线观看| 一个人免费观看www视频在线| 亚洲色欲色欲www在线播放| 国产zzjjzzjj视频全免费| 国产精品综合专区中文字幕免费播放| 亚洲精品成人网站在线观看 | 国产大片免费观看中文字幕| 黄页网站在线观看免费| 亚洲色偷拍另类无码专区| 免费人妻无码不卡中文字幕系| 亚洲免费观看网站| 国产一区视频在线免费观看 | 毛茸茸bbw亚洲人| 久久精品免费一区二区| 久久久久亚洲精品无码网址色欲| 久久亚洲国产成人影院网站| 最近免费视频中文字幕大全| 国产亚洲一卡2卡3卡4卡新区| 亚洲情XO亚洲色XO无码| 一二三四在线播放免费观看中文版视频 | 亚洲精品国产精品乱码不卡√| 成年网站免费视频A在线双飞|