• <output id="aynwq"><form id="aynwq"><code id="aynwq"></code></form></output>

    <mark id="aynwq"><option id="aynwq"></option></mark>
  • <mark id="aynwq"><option id="aynwq"></option></mark><label id="aynwq"><dl id="aynwq"></dl></label>
  • 學(xué)習(xí)啦>知識(shí)大全>知識(shí)百科>百科知識(shí)>

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

    時(shí)間: 映芳735 分享

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

      static 和final的區(qū)別

      一、static

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

      1、只想用一個(gè)存儲(chǔ)區(qū)域來(lái)保存一個(gè)特定的數(shù)據(jù)——無(wú)論要?jiǎng)?chuàng)建多少個(gè)對(duì)象,甚至根本不創(chuàng) 建對(duì)象。

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

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

      下面我先舉個(gè)例子:

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

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

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

      class StaticTest {

      Static int i = 47;

      }

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

      StaticTest st1 = new StaticTest();

      StaticTest st2 = new StaticTest();

      此時(shí),無(wú)論st1.i還是st2.i都有同樣的值47,因?yàn)樗鼈円玫氖峭瑯拥膬?nèi)存區(qū)域。

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

      StaticTest.i++;

      其中,++運(yùn)算符會(huì)使變量增值。此時(shí),無(wú)論st1.i還是st2.i的值都是48。

      類似的邏輯也適用于靜態(tài)方法。既可象對(duì)其他任何方法那樣通過(guò)一個(gè)對(duì)象引用靜態(tài)方法,亦可用特殊的語(yǔ)法格式“類名.方法()”加以引用。靜態(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)方法,所以可通過(guò)它的類直接調(diào)用:

      StaticFun.incr();

      對(duì)方法來(lái)說(shuō),static一項(xiàng)重要的用途就是幫助我們?cè)诓槐貏?chuàng)建對(duì)象的前提下調(diào)用那個(gè)方法。

      舉簡(jiǎn)單一例如下:

      public class TestStatic {

      public static void main(String args[]){

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

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

      mycard_1.addFee = 0.8;//給第一張卡的附加費(fèi)addFee賦值為0.8

      //注意到我們沒(méi)有給第二張卡賦值

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

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

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

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

      //該句的打印輸出表明卡類的附加費(fèi)都是0.8

      }

      }

      class PhoneCard{

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

      }

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

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

      static 修飾方法時(shí)是同理。

      二、final

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

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

      如定義了一個(gè)final類:

      final class SnowBird{

      int i;

      String s;

      static void fly(){

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

      }

      }

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

      public class Bird extends SnowBird{

      public static void main(String[] args){

      SnowBird.fly();

      }

      }

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

      出錯(cuò)信息是:cannot inherit from final SnowBird

      表明final 類不可被繼承。

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

      2、final修飾變量

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

      final String connectNumber = "201";

      final表明 connectNumber是一個(gè)常量,它的取值在整個(gè)過(guò)程都不會(huì)改變。

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

      有時(shí)我們?yōu)榱斯?jié)省空間,常量通常聲明為 static .因?yàn)槿缟纤f(shuō)的 static 用的是類的內(nèi)存空間。

      3、修飾方法:

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

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

      則子類就不能定義

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

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

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

      舉個(gè)例子如下:

      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)什么錯(cuò)誤?

      然后,把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定義的變量可以看做一個(gè)常量,那么static與final之間有什么區(qū)別呢?下面小編告訴你。 static 和final的區(qū)別 一、static 什么情況下我們要使用static呢? 1、只想用一個(gè)存儲(chǔ)區(qū)域來(lái)保存一個(gè)特定的數(shù)據(jù)無(wú)論要?jiǎng)?chuàng)建多少個(gè)對(duì)象,甚
    推薦度:
    點(diǎn)擊下載文檔文檔為doc格式

    精選文章

    • 注冊(cè)會(huì)計(jì)師報(bào)考條件
      注冊(cè)會(huì)計(jì)師報(bào)考條件

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

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

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

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

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

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

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

    537534 主站蜘蛛池模板: 亚洲国产老鸭窝一区二区三区| 美女免费网站xx美女女女女女女bbbbbb毛片| www国产成人免费观看视频| 中文字幕日韩人妻不卡一区| 久久电影网午夜鲁丝片免费| 亚洲av色无码乱码在线观看| 亚洲国产高清人在线| 亚洲欧美在线观看首页| 亚洲香蕉在线观看| 免费av一区二区三区无码| 午夜美女福利视频| 国产一区二区不卡老阿姨| 国产一级淫片a视频免费观看| 国产人妖cdmagnet| 国产一区二区精品久久岳| 国产欧美色一区二区三区| 国产精品亚洲综合一区在线观看| 国产精品先锋资源站先锋影院| 国产精品无码无卡无需播放器| 国产精品久久国产精品99| 国产精品免费av片在线观看| 国产日产精品_国产精品毛片| 国产成人综合久久久久久| 国产伦精品一区二区三区视频小说 | 亚洲精品中文字幕乱码影院| 亚洲精选在线观看| 亚洲黄色激情网| 亚洲精品一区二区三区四区乱码 | 午夜福利视频合集1000| 国产国产精品人在线观看| 国产亚洲av综合人人澡精品| 四虎国产永久免费久久| 十六以下岁女子毛片免费| 人人爽人人爽人人片av| 亚洲欧美清纯丝袜另类| 亚洲另类古典武侠| 久久综合国产乱子伦精品免费| 久久精品成人欧美大片| 久久久久久久综合日本| 一区二区三区杨幂在线观看| 99精品国产一区二区|