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

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

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

    Dict.CN 在線詞典, 英語學習, 在線翻譯

    都市淘沙者

    荔枝FM Everyone can be host

    統(tǒng)計

    留言簿(23)

    積分與排名

    優(yōu)秀學習網(wǎng)站

    友情連接

    閱讀排行榜

    評論排行榜

    Java修飾符之static

    Static這個修飾符相信大家不陌生吧,沒錯它就是靜態(tài)修飾符,什么叫靜態(tài)修飾符呢?大家都知道,在程序中任何變量或者代碼都是在編譯時由系統(tǒng)自動分配內(nèi)存來存儲的,而所謂靜態(tài)就是指在編譯后所分配的內(nèi)存會一直存在,直到程序退出內(nèi)存才會釋放這個空間,也就是只要程序在運行,那么這塊內(nèi)存就會一直存在。這樣做有什么意義呢?
    在java程序里面,所有的東西都是對象,而對象的抽象就是類,對于一個類而言,如果要使用他的成員,那么普通情況下必須先實例化對象后,通過對象的引用才能夠訪問這些成員,但是有種情況例外,就是該成員是用static聲明的(在這里所講排除了類的訪問控制),例如:
    未聲明為static
    class ClassA{
    int b;
    public void ex1(){

    }
    }
    class ClassB{
    void ex2{
    int i;
    ClassA a = new ClassA();
    i = a.b; //這里通過對象引用訪問成員變量b
    a.ex1; //這里通過對象引用訪問成員函數(shù)ex1
    }
    }

    聲明為static
    class ClassA{
    static int b;
    static void ex1(){

    }
    }
    class ClassB{
    void ex2{
    int i;
    i = ClassA.b; //這里通過類名訪問成員變量b
    ClassA.ex1; //這里通過類名訪問成員函數(shù)ex1
    }
    }
    通過以上兩種比較,就可以知道static用來修飾類成員的主要作用了,在java類庫當中有很多類成員都聲明為static,可以讓用戶不需要實例化對象就可以引用成員,最基本的有Integer.parseInt(),F(xiàn)loat.parseFloat()等等用來把對象轉(zhuǎn)換為所需要的基本數(shù)據(jù)類型。這樣的變量和方法我們又叫做類變量和類方法。
    接下來講一下被static修飾后的變量的值的問題,剛才在前面講過,被static修飾后的成員,在編譯時由內(nèi)存分配一塊內(nèi)存空間,直到程序停止運行才會釋放,那么就是說該類的所有對象都會共享這塊內(nèi)存空間,看一下下面這個例子:
    class TStatic{
    static int i;

    public TStatic(){
    i = 4;
    }

    public TStatic(int j){
    i = j;
    }

    public static void main(String args[]){
    TStatic t = new TStatic(5); //聲明對象引用,并實例化
    TStatic tt = new TStatic(); //同上
    System.out.println(t.i);
    System.out.println(tt.i);
    System.out.println(t.i);
    }
    }
    這段代碼里面Tstatic類有一個static的int變量I,有兩個構造函數(shù),第一個用于初始化I為4,第二個用于初始化i為傳進函數(shù)的值,在main中所傳的值是5,程序首先聲明對象的引用t,然后調(diào)用帶參數(shù)的構造函數(shù)實例化對象,此時對象t的成員變量I的值為5,接著聲明對象tt,調(diào)用無參數(shù)的構造函數(shù),那么就把對象tt的成員變量i的值初始化為4了,注意了,在這里i是static,那就是說該類的所有對象都共享該內(nèi)存,那也就是說在實例化對象tt的時候改變了i的值,那么實際上對象t的i值也變了,因為實際上他們引用的是同一個成員變量。最后打印的結果是三個4。呵呵,寫到這里大家是否明白了呢?不明白就再看看書或者多寫幾個例子印證一下,呵呵。
    上面通過構造函數(shù)初始化變量講了下關于變量的值的問題,在這里還要補充一下關于原始數(shù)據(jù)類型默認初始化的問題,大家知道,在類函數(shù)的外部聲明的變量是全局變量,這些全局變量如果是原始數(shù)據(jù)類型的話,那么不論是否有在聲明的時候顯示初始化,在每次對象實例化的時候系統(tǒng)都會給其自動初始化的,而對于一個聲明為static的原始數(shù)據(jù)類型的全局變量來說,這樣的初始化只會進行一次,例如:
    class TStatic{
    int i = 2;
    public static void main(String args[]){
    TStatic t = new TStatic(); //第一次實例化,系統(tǒng)自動初始化
    t.i = 3;
    TStatic tt = new TStatic(); //第二次初始化

    System.out.println(t.i);
    System.out.println(tt.i);
    }
    }
    最后結果為3,2,在這里實例化了兩次對象,而全局變量就初始化了兩次,而如果全局變量i聲明為static的話,那么雖然實例化兩次,實際上變量i只初始化了一次,在第二次實例化的時候不會對全局變量進行初始化了,此時輸出的結果是3,3,對象tt的成員i也是3,而不是想象中被int i=2初始化為2了,因為它不會再進行第二次初始化。
    最后再講一下使用static需要主要的地方,主要就是在static方法中,只能訪問static方法和static變量,而反過來在非static方法中就什么都可以訪問了,關于static的一些講解就到這里了,由于本人所學有限,還有很多遺漏的或者是不足的地方,希望大家能夠提出來,隨時歡迎和我一起討論相關的知識,謝謝支持。

    posted on 2006-12-02 10:20 都市淘沙者 閱讀(198) 評論(0)  編輯  收藏 所屬分類: Java Basic/Lucene/開源資料

    主站蜘蛛池模板: 国产亚洲av片在线观看播放| 国产免费131美女视频| 亚洲人成图片小说网站| 免费人妻精品一区二区三区| 亚洲国产高清精品线久久| 免费人成动漫在线播放r18 | 亚洲国产夜色在线观看| 在线免费观看你懂的| 久久亚洲精品成人AV| 精品福利一区二区三区免费视频 | 国产亚洲视频在线观看网址| 国产成人在线免费观看| 免费国产黄网站在线观看动图| 全亚洲最新黄色特级网站| 一级毛片aaaaaa视频免费看| 亚洲伊人色欲综合网| 日本免费大黄在线观看| 亚洲一级片在线观看| 日本视频免费在线| 亚洲天堂免费在线视频| 亚洲人成电影亚洲人成9999网 | 边摸边吃奶边做爽免费视频99 | 国产成人精品日本亚洲专区 | 永久免费观看黄网站| 亚洲第一福利视频| 日本精品人妻无码免费大全 | 在线观看片免费人成视频无码| 亚洲视频日韩视频| 永久中文字幕免费视频网站| 青青久久精品国产免费看| 亚洲精品高清视频| 日本特黄特黄刺激大片免费| 一级做a爰片久久毛片免费陪 | 色在线亚洲视频www| 又爽又高潮的BB视频免费看| 97无码人妻福利免费公开在线视频 | 国产一区二区三区免费观看在线| 亚洲国产成人精品久久| 亚洲精品高清一二区久久| 99久在线国内在线播放免费观看| 亚洲av无码一区二区三区天堂 |