亚洲欧美精品沙发,日韩在线精品视频,亚洲Av每日更新在线观看,亚洲国产另类一区在线5

<pre id="hdphd"></pre>

  • <div id="hdphd"><small id="hdphd"></small></div>
      學(xué)習(xí)啦>知識大全>知識百科>百科知識>

      Java中static 和final的區(qū)別

      時間: 映芳735 分享

        Java中用final定義的變量可以看做一個常量,那么static與final之間有什么區(qū)別呢?下面小編告訴你。

        static 和final的區(qū)別

        一、static

        什么情況下我們要使用static呢?

        1、只想用一個存儲區(qū)域來保存一個特定的數(shù)據(jù)——無論要創(chuàng)建多少個對象,甚至根本不創(chuàng) 建對象。

        2、我們需要一個特殊的方法,它沒有與這個類的任何對象關(guān)聯(lián)。也就是說,即使沒有創(chuàng)建對象,也需要一個能調(diào)用的方法。

        為滿足這兩方面的要求,可使用static(靜態(tài))關(guān)鍵字。

        下面我先舉個例子:

        一旦將什么東西設(shè)為static,數(shù)據(jù)或方法就不會同那個類的任何對象實例聯(lián)系到一起。所以盡管從未創(chuàng)建那個類的一個對象,仍能調(diào)用一個static方法,或訪問一些static數(shù)據(jù)。

        為了將數(shù)據(jù)成員或方法設(shè)為static,只需在定義前置和這個關(guān)鍵字即可。

        例如,下述代碼能生成一個static數(shù)據(jù)成員,并對其初始化:

        class StaticTest {

        Static int i = 47;

        }

        現(xiàn)在,盡管我們制作了兩個StaticTest對象,但它們?nèi)匀恢徽紦?jù)StaticTest.i的一個存儲空間。這兩個對象都共享同樣的i。請考察下述代碼:

        StaticTest st1 = new StaticTest();

        StaticTest st2 = new StaticTest();

        此時,無論st1.i還是st2.i都有同樣的值47,因為它們引用的是同樣的內(nèi)存區(qū)域。

        有兩個辦法可引用一個static變量。正如上面展示的那樣,可通過一個對象命名它,如st2.i。亦可直接用它的類名引用,而這在非靜態(tài)成員里是行不通的(最好用這個辦法引用static變量,因為它強調(diào)了那個變量的“靜態(tài)”本質(zhì))。

        StaticTest.i++;

        其中,++運算符會使變量增值。此時,無論st1.i還是st2.i的值都是48。

        類似的邏輯也適用于靜態(tài)方法。既可象對其他任何方法那樣通過一個對象引用靜態(tài)方法,亦可用特殊的語法格式“類名.方法()”加以引用。靜態(tài)方法的定義是類似的:

        class StaticFun {

        static void incr() { StaticTest.i++; }

        }

        從中可看出,StaticFun的方法incr()使靜態(tài)數(shù)據(jù)i增值??捎玫湫偷姆椒ㄕ{(diào)用incr():

        StaticFun sf = new StaticFun();

        sf.incr();

        或者,由于incr()是一種靜態(tài)方法,所以可通過它的類直接調(diào)用:

        StaticFun.incr();

        對方法來說,static一項重要的用途就是幫助我們在不必創(chuàng)建對象的前提下調(diào)用那個方法。

        舉簡單一例如下:

        public class TestStatic {

        public static void main(String args[]){

        PhoneCard mycard_1 = new PhoneCard();//創(chuàng)建第一張卡對象

        PhoneCard mycard_2 = new PhoneCard();//創(chuàng)建第二張卡對象

        mycard_1.addFee = 0.8;//給第一張卡的附加費addFee賦值為0.8

        //注意到我們沒有給第二張卡賦值

        System.out.println("第一張卡的附加費:" + mycard_1.addFee);

        System.out.println("第二張卡的附加費:" + mycard_2.addFee);

        //發(fā)現(xiàn)沒有?輸出結(jié)果中第二張卡的附加費也是0.8 了。

        System.out.println("卡的附加費:" + PhoneCard.addFee);

        //該句的打印輸出表明卡類的附加費都是0.8

        }

        }

        class PhoneCard{

        static double addFee;//靜態(tài)域addFee

        }

        該例創(chuàng)建了兩個類,PhoneCard類只定義了一個變量,TestStatic類里創(chuàng)建了兩個PhoneCard類對象,并給其中的一個對象的附加費addFee賦值,而另一個對象沒賦值。

        由上例可以看出,靜態(tài)域保存在類的公共存儲單元,而不是保存在對象的存儲單元內(nèi)。

        static 修飾方法時是同理。

        二、final

        final可修飾類、域(變量和常量)、方法 (而static不修飾類)

        1、final修飾類,表示該類不可被繼承。

        如定義了一個final類:

        final class SnowBird{

        int i;

        String s;

        static void fly(){

        System.out.println("snowbird is flying");

        }

        }

        //現(xiàn)在定義一個類,試圖繼承SnowBird類:

        public class Bird extends SnowBird{

        public static void main(String[] args){

        SnowBird.fly();

        }

        }

        把上面的兩個類拷貝到文件中,文件名保存為Bird.java ,現(xiàn)在編譯看看會出現(xiàn)什么問題?

        出錯信息是:cannot inherit from final SnowBird

        表明final 類不可被繼承。

        那么,final修飾變量是怎么樣呢?

        2、final修飾變量

        程序中經(jīng)常需要定義各種類型的常量,如:3.24268,"201"等等。這時候我們就用final來修飾一個類似于標志符名字。如:

        final String connectNumber = "201";

        final表明 connectNumber是一個常量,它的取值在整個過程都不會改變。

        如果把final 去掉則connectNumber就成為變量了。

        有時我們?yōu)榱斯?jié)省空間,常量通常聲明為 static .因為如上所說的 static 用的是類的內(nèi)存空間。

        3、修飾方法:

        final修飾的方法,稱為最終方法。最終方法不可被子類重新定義,即不可被覆蓋。

        如父類定義了public void fly(){ ....}

        則子類就不能定義

        public void fly(){。。。。。。}

        但注意覆蓋與重載的區(qū)別。不能被覆蓋并不是不能被重載,如你還可以定義

        public void fly(int i){.....},

        舉個例子如下:

        class FinalValue {

        static final int i = 1;

        final void fly(){

        System.out.println("SnowBird is flying over FinalValue ");

        }

        }

        class TestFinal extends FinalValue {

        int i = 2;

        void fly(){

        System.out.println("SnowBird is flying over TestFinal");

        System.out.println("In class FinalValue static Final i = "+ FinalValue.i);

        System.out.println("In class TestFinal i = "+ i);

        }

        void fly(String s){

        System.out.println("fly("+ s + ")");

        }

        }

        public class Test {

        public static void main(String args[]){

        TestFinal tf = new TestFinal();

        tf.fly();

        tf.fly("ok");

        System.out.println(tf.i);

        }

        }

        把上面的程序保存為Test.java編譯看看,出現(xiàn)什么錯誤?

        然后,把TestFinal類中的 void fly(){ ... } 注解掉

        即 如下

        /* void fly(){

        System.out.println("SnowBird is flying over TestFinal");

        System.out.println("In class FinalValue static Final i = "+ FinalValue.i);

        System.out.println("In class TestFinal i = "+ i);

        }*/

      Java中static 和final的區(qū)別

      Java中用final定義的變量可以看做一個常量,那么static與final之間有什么區(qū)別呢?下面小編告訴你。 static 和final的區(qū)別 一、static 什么情況下我們要使用static呢? 1、只想用一個存儲區(qū)域來保存一個特定的數(shù)據(jù)無論要創(chuàng)建多少個對象,甚
      推薦度:
      點擊下載文檔文檔為doc格式

      精選文章

      • 注冊會計師報考條件
        注冊會計師報考條件

        從會計職業(yè)規(guī)劃的角度來說,注冊會計師是每個會計學(xué)子的終極目標。其豐厚的薪資和高檔的辦公樓深深吸引著會計人的心。下面小編就來說說注冊會計師

      • Java中對象和引用的具體區(qū)別
        Java中對象和引用的具體區(qū)別

        初學(xué)Java的人,可能在在很長一段時間里,對對象和引用的基本概念都是很模糊的,老是分不清楚兩者的區(qū)別。下面,學(xué)習(xí)啦小編給你整理一些有關(guān)對象和引

      • 會計專業(yè)受捧的原因
        會計專業(yè)受捧的原因

        具小編了解,目前會計學(xué)可謂是人氣最高的一門學(xué)科之一,有學(xué)妹告訴我,她們學(xué)校,會計專業(yè)開設(shè)8個班,總?cè)藬?shù)300多人,幾乎達到一個系的人數(shù),那么為

      • Java中int和integer的區(qū)別
        Java中int和integer的區(qū)別

        Java中有兩個數(shù)據(jù)類型,一個是int,一個是integer,這兩個數(shù)據(jù)類型是一樣的嗎?其實,它們是不同的數(shù)據(jù)類型,具體有哪些不同。下面,小編來跟大家分享

      537534