亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

final數據

2019-11-18 13:21:21
字體:
來源:轉載
供稿:網友

  許多程序設計語言都有自己的辦法告訴編譯器某個數據是“常數”。常數主要應用于下述兩個方面:
  
  (1) 編譯期常數,它永遠不會改變
  
  (2) 在運行期初始化的一個值,我們不希望它發生變化
  
  對于編譯期的常數,編譯器(程序)可將常數值“封裝”到需要的計算過程里。也就是說,計算可在編譯期間提前執行,從而節省運行時的一些開銷。在java中,這些形式的常數必須屬于基本數據類型(PRimitives),而且要用final要害字進行表達。在對這樣的一個常數進行定義的時候,必須給出一個值。
  
  無論static還是final字段,都只能存儲一個數據,而且不得改變。
  
  若隨同對象句柄使用final,而不是基本數據類型,它的含義就稍微讓人有點兒迷糊了。對于基本數據類型,final會將值變成一個常數;但對于對象句柄,final會將句柄變成一個常數。進行聲明時,必須將句柄初始化到一個具體的對象。而且永遠不能將句柄變成指向另一個對象。然而,對象本身是可以修改的。Java對此未提供任何手段,可將一個對象直接變成一個常數(但是,我們可自己編寫一個類,使其中的對象具有“常數”效果)。這一限制也適用于數組,它也屬于對象。
  
  下面是演示final字段用法的一個例子:
  
  //: FinalData.java
  // The effect of final on fields
  
  class Value {
   int i = 1;
  }
  
  public class FinalData {
   // Can be compile-time constants
   final int i1 = 9;
   static final int I2 = 99;
   // Typical public constant:
   public static final int I3 = 39;
   // Cannot be compile-time constants:
   final int i4 = (int)(Math.random()*20);
   static final int i5 = (int)(Math.random()*20);
   
   Value v1 = new Value();
   final Value v2 = new Value();
   static final Value v3 = new Value();
   //! final Value v4; // Pre-Java 1.1 Error:
             // no initializer
   // Arrays:
   final int[] a = { 1, 2, 3, 4, 5, 6 };
  
   public void print(String id) {
    System.out.println(
     id + ": " + "i4 = " + i4 +
     ", i5 = " + i5);
   }
   public static void main(String[] args) {
    FinalData fd1 = new FinalData();
    //! fd1.i1++; // Error: can't change value
    fd1.v2.i++; // Object isn't constant!
    fd1.v1 = new Value(); // OK -- not final
    for(int i = 0; i < fd1.a.length; i++)
     fd1.a[i]++; // Object isn't constant!
    //! fd1.v2 = new Value(); // Error: Can't
    //! fd1.v3 = new Value(); // change handle
    //! fd1.a = new int[3];
  
    fd1.print("fd1");
    System.out.println("Creating new FinalData");
    FinalData fd2 = new FinalData();
    fd1.print("fd1");
    fd2.print("fd2");
   }
  } ///:~
  
  由于i1和I2都是具有final屬性的基本數據類型,并含有編譯期的值,所以它們除了能作為編譯期的常數使用外,在任何導入方式中也不會出現任何不同。I3是我們體驗此類常數定義時更典型的一種方式:public表示它們可在包外使用;Static強調它們只有一個;而final表明它是一個常數。注重對于含有固定初始化值(即編譯期常數)的fianl static基本數據類型,它們的名字根據規則要全部采用大寫。也要注重i5在編譯期間是未知的,所以它沒有大寫。
  
  不能由于某樣東西的屬性是final,就認定它的值能在編譯時期知道。i4和i5向大家證實了這一點。它們在運行期間使用隨機生成的數字。例子的這一部分也向大家揭示出將final值設為static和非static之間的差異。只有當值在運行期間初始化的前提下,這種差異才會揭示出來。因為編譯期間的值被編譯器認為是相同的。這種差異可從輸出結果中看出:
  
  fd1: i4 = 15, i5 = 9
  Creating new FinalData
  fd1: i4 = 15, i5 = 9
  fd2: i4 = 10, i5 = 9
  
  注重對于fd1和fd2來說,i4的值是唯一的,但i5的值不會由于創建了另一個FinalData對象而發生改變。那是因為它的屬性是static,而且在載入時初始化,而非每創建一個對象時初始化。
  
  從v1到v4的變量向我們揭示出final句柄的含義。正如大家在main()中看到的那樣,并不能認為由于v2屬于final,所以就不能再改變它的值。然而,我們確實不能再將v2綁定到一個新對象,因為它的屬性是final。這便是final對于一個句柄的確切含義。我們會發現同樣的含義亦適用于數組,后者只不過是另一種類型的句柄而已。將句柄變成final看起來似乎不如將基本數據類型變成final那么有用。
  
  2. 空白final
  
  Java 1.1答應我們創建“空白final”,它們屬于一些非凡的字段。盡管被聲明成final,但卻未得到一個初始值。無論在哪種情況下,空白final都必須在實際使用前得到正確的初始化。而且編譯器會主動保證這一規定得以貫徹。然而,對于final要害字的各種應用,空白final具有最大的靈活性。舉個例子來說,位于類內部的一個final字段現在對每個對象都可以有所不同,同時依然保持其“不變”的本質。下面列出一個例子:
  
  //: BlankFinal.java
  // "Blank" final data members
  
  class Poppet { }
  
  class BlankFinal {
   final int i = 0; // Initialized final
   final int j; // Blank final
   final Poppet p; // Blank final handle
   // Blank finals MUST be initialized
   // in the constrUCtor:
   BlankFinal() {
    j = 1; // Initialize blank final
    p = new Poppet();
   }
   BlankFinal(int x) {
    j = x; // Initialize blank final
    p = new Poppet();
   }
   public static void main(String[] args) {
    BlankFinal bf = new BlankFinal();
   }
  } ///:~
  
  現在強行要求我們對final進行賦值處理——要么在定義字段時使用一個表達 式,要么在每個構建器中。這樣就可以確保final字段在使用前獲得正確的初始化。
  
  3. final自變量
  
  Java 1.1答應我們將自變量設成final屬性,方法是在自變量列表中對它們進行適當的聲明。這意味著在一個方法的內部,我們不能改變自變量句柄指向的東西。如下所示:
  
  //: FinalArguments.java
  // Using "final" with method arguments
  
  class Gizmo {
   public void spin() {}
  }
  
  public class FinalArguments {
   void with(final Gizmo g) {
    //! g = new Gizmo(); // Illegal -- g is final
    g.spin();
   }
   void without(Gizmo g) {
    g = new Gizmo(); // OK -- g not final
    g.spin();
   }
   // void f(final int i) { i++; } // Can't change
   // You can only read from a final primitive:
   int g(final int i) { return i + 1; }
   public static void main(String[] args) {
    FinalArguments bf = new FinalArguments();
    bf.without(null);
    bf.with(null);
   }
  } ///:~
  
  注重此時仍然能為final自變量分配一個null(空)句柄,同時編譯器不會捕捉它。這與我們對非final自變量采取的操作是一樣的。
  
  方法f()和g()向我們展示出基本類型的自變量為final時會發生什么情況:我們只能讀取自變量,不可改變它。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
美女国内精品自产拍在线播放| 国产日韩欧美综合| 青青久久av北条麻妃黑人| 国产在线高清精品| 欧美日本在线视频中文字字幕| 欧美裸体xxxx极品少妇软件| 亚洲自拍偷拍色片视频| 92福利视频午夜1000合集在线观看| 久久青草福利网站| 欧美精品精品精品精品免费| 成人a免费视频| 国产精品一二三视频| 91久热免费在线视频| 欧美日韩高清在线观看| 日韩美女视频免费在线观看| 性金发美女69hd大尺寸| 亚洲欧美999| 日韩电影在线观看免费| 深夜精品寂寞黄网站在线观看| 国产精品久久国产精品99gif| 国产精品美女主播在线观看纯欲| 一区二区三区黄色| 日本一区二区三区四区视频| 国产精品你懂得| 日韩视频在线免费| 毛片精品免费在线观看| 欧美日韩午夜视频在线观看| 97国产成人精品视频| 国产一区二区三区在线播放免费观看| 国产91在线播放九色快色| 亚洲欧美精品中文字幕在线| 91老司机精品视频| 欧美日韩在线视频首页| 亚洲美女精品成人在线视频| 日本电影亚洲天堂| 日韩免费av片在线观看| 夜夜嗨av一区二区三区免费区| 成人精品网站在线观看| 亚洲奶大毛多的老太婆| 91欧美精品午夜性色福利在线| 欧美性猛交xxxx偷拍洗澡| 神马久久久久久| 亚洲免费视频网站| 精品视频www| 亚洲美女av网站| 九九热精品视频国产| 久久久久久久久中文字幕| 日韩av第一页| 久久精品91久久香蕉加勒比| 国产成人拍精品视频午夜网站| 国产91色在线|| 欧美肥臀大乳一区二区免费视频| 国产精品日韩在线一区| 欧美最猛黑人xxxx黑人猛叫黄| 欧美一级免费看| 秋霞av国产精品一区| 亚洲欧洲日产国码av系列天堂| 亚洲美女av黄| 国产精品久久久久久久久借妻| 精品久久久久久久久国产字幕| 午夜精品美女自拍福到在线| 亚洲尤物视频网| y97精品国产97久久久久久| 欧美另类交人妖| 亚洲欧美日韩国产中文| 欧美情侣性视频| 91高清视频免费| 欧美成人高清视频| 欧美日本国产在线| 日韩最新中文字幕电影免费看| 91精品国产色综合| 国内精品久久久久久影视8| 亚洲乱亚洲乱妇无码| 亚洲图片制服诱惑| 亚洲精品国产品国语在线| 色偷偷9999www| 成人在线免费观看视视频| 国模精品视频一区二区三区| 欧美精品日韩三级| 日韩免费观看网站| 国产精品久久久久久网站| 亚洲午夜久久久影院| 中文字幕无线精品亚洲乱码一区| 亚洲欧洲国产一区| 久久久国产一区二区| 一本大道亚洲视频| 亚洲第一页在线| 亚洲成年人在线| 91久久久久久久久久久| 国产精品久久久久久久久影视| 久久视频中文字幕| 在线视频一区二区| 亚洲第一级黄色片| 精品小视频在线| 日韩免费电影在线观看| 久久久91精品国产| 欧美精品久久久久久久久| 久久影院免费观看| 国产激情久久久久| 久久99久久99精品免观看粉嫩| 欧美孕妇孕交黑巨大网站| 日韩精品视频三区| 国产成人一区三区| 欧美午夜影院在线视频| 九九精品在线播放| 亚洲日本欧美中文幕| 亚洲成人久久久| 久久视频在线看| 亚洲欧美国产制服动漫| 欧美放荡办公室videos4k| 日韩成人激情影院| 国产精品自拍小视频| 欧亚精品在线观看| 国产精品揄拍一区二区| 成人黄色av播放免费| 国语自产精品视频在免费| 精品亚洲va在线va天堂资源站| 欧美激情精品久久久久久| 欧美国产亚洲精品久久久8v| 亚洲国产精彩中文乱码av在线播放| 国产亚洲欧洲高清一区| 久久伊人免费视频| 国产婷婷色综合av蜜臀av| 欧美在线视频免费观看| 久久久久久这里只有精品| 欧美电影免费观看高清完整| 91地址最新发布| 日韩美女视频免费在线观看| 91精品视频网站| 成人97在线观看视频| 韩剧1988免费观看全集| 日韩av免费在线播放| 亚洲综合成人婷婷小说| 亚洲视频一区二区三区| 日韩精品视频在线播放| 亚洲一区二区三区香蕉| xxxxxxxxx欧美| 亚洲精品之草原avav久久| 日韩精品极品在线观看| 日韩有码在线播放| 日韩av123| 2019中文字幕在线| 日本亚洲欧美成人| 精品欧美aⅴ在线网站| 欧美一区二区视频97| 欧美日韩免费看| 欧美激情网站在线观看| 午夜精品免费视频| 人妖精品videosex性欧美| 国产成人精品999| 欧美日韩国产一区二区三区| 亚洲图片制服诱惑| xxxxxxxxx欧美| 欧美日韩国产成人| 欧美成人在线影院| 国产精品久久电影观看| 亚洲第一av网| 成人情趣片在线观看免费| 国产精品久久二区| 欧美日韩亚洲一区二区| 国产精品午夜国产小视频| 亚洲欧美国产精品久久久久久久| 精品毛片网大全| 国产精品无码专区在线观看|