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

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

數組和第一類對象

2019-11-18 12:08:36
字體:
來源:轉載
供稿:網友

  無論使用的數組屬于什么類型,數組標識符實際都是指向真實對象的一個句柄。那些對象本身是在內存“堆”里創建的。堆對象既可“隱式”創建(即默認產生),亦可“顯式”創建(即明確指定,用一個new表達式)。堆對象的一部分(實際是我們能訪問的唯一字段或方法)是只讀的length(長度)成員,它告訴我們那個數組對象里最多能容納多少元素。對于數組對象,“[]”語法是我們能采用的唯一另類訪問方法。
  
  下面這個例子展示了對數組進行初始化的不同方式,以及如何將數組句柄分配給不同的數組對象。它也揭示出對象數組和基本數據類型數組在使用方法上幾乎是完全一致的。唯一的差別在于對象數組容納的是句柄,而基本數據類型數組容納的是具體的數值(若在執行此程序時碰到困難,請參考第3章的“賦值”小節):
  
  
  //: ArraySize.java
  // Initialization & re-assignment of arrays
  package c08;
  
  class Weeble {} // A small mythical creature
  
  public class ArraySize {
   public static void main(String[] args) {
    // Arrays of objects:
    Weeble[] a; // Null handle
    Weeble[] b = new Weeble[5]; // Null handles
    Weeble[] c = new Weeble[4];
    for(int i = 0; i < c.length; i++)
     c[i] = new Weeble();
    Weeble[] d = {
     new Weeble(), new Weeble(), new Weeble()
    };
    // Compile error: variable a not initialized:
    //!System.out.    System.out.println("b.length = " + b.length);
    // The handles inside the array are
    // automatically initialized to null:
    for(int i = 0; i < b.length; i++)
     System.out.println("b[" + i + "]=" + b[i]);
    System.out.println("c.length = " + c.length);
    System.out.println("d.length = " + d.length);
    a = d;
    System.out.println("a.length = " + a.length);
    // Java 1.1 initialization syntax:
    a = new Weeble[] {
     new Weeble(), new Weeble()
    };
    System.out.println("a.length = " + a.length);
  
    // Arrays of primitives:
    int[] e; // Null handle
    int[] f = new int[5];
    int[] g = new int[4];
    for(int i = 0; i < g.length; i++)
     g[i] = i*i;
    int[] h = { 11, 47, 93 };
    // Compile error: variable e not initialized:
    //!System.out.println("e.length=" + e.length);
    System.out.println("f.length = " + f.length);
    // The primitives inside the array are
    // automatically initialized to zero:
    for(int i = 0; i < f.length; i++)
     System.out.println("f[" + i + "]=" + f[i]);
    System.out.println("g.length = " + g.length);
    System.out.println("h.length = " + h.length);
    e = h;
    System.out.println("e.length = " + e.length);
    // Java 1.1 initialization syntax:
    e = new int[] { 1, 2 };
    System.out.println("e.length = " + e.length);
   }
  } ///:~
  Here’s the output from the program:
  
  
  b.length = 5
  b[0]=null
  b[1]=null
  b[2]=null
  b[3]=null
  b[4]=null
  c.length = 4
  d.length = 3
  a.length = 3
  a.length = 2
  f.length = 5
  f[0]=0
  f[1]=0
  f[2]=0
  f[3]=0
  f[4]=0
  g.length = 4
  h.length = 3
  e.length = 3
  e.length = 2
  
  其中,數組a只是初始化成一個null句柄。此時,編譯器會禁止我們對這個句柄作任何實際操作,除非已正確地初始化了它。數組b被初始化成指向由Weeble句柄構成的一個數組,但那個數組里實際并未放置任何Weeble對象。然而,我們仍然可以查詢那個數組的大小,因為b指向的是一個合法對象。這也為我們帶來了一個難題:不可知道那個數組里實際包含了多少個元素,因為length只告訴我們可將多少元素置入那個數組。換言之,我們只知道數組對象的大小或容量,不知其實際容納了多少個元素。盡管如此,由于數組對象在創建之初會自動初始化成null,所以可檢查它是否為null,判定一個特定的數組“空位”是否容納一個對象。類似地,由基本數據類型構成的數組會自動初始化成零(針對數值類型)、null(字符類型)或者false(布爾類型)。
  
  數組c顯示出我們首先創建一個數組對象,再將Weeble對象賦給那個數組的所有“空位”。數組d揭示出“集合初始化”語法,從而創建數組對象(用new命令明確進行,類似于數組c),然后用Weeble對象進行初始化,全部工作在一條語句里完成。
  
  下面這個表達式:
  
  a = d;
  
  向我們展示了如何取得同一個數組對象連接的句柄,然后將其賦給另一個數組對象,就象我們針對對象句柄的其他任何類型做的那樣。現在,a和d都指向內存堆內同樣的數組對象。
  
  Java 1.1加入了一種新的數組初始化語法,可將其想象成“動態集合初始化”。由d采用的Java 1.0集合初始化方法則必須在定義d的同時進行。但若采用Java 1.1的語法,卻可以在任何地方創建和初始化一個數組對象。例如,假設hide()方法用于取得一個Weeble對象數組,那么調用它時傳統的方法是:
  
  hide(d);
  
  但在Java 1.1中,亦可動態創建想作為參數傳遞的數組,如下所示:
  
  hide(new Weeble[] {new Weeble(), new Weeble() });
  
  這一新式語法使我們在某些場合下寫代碼更方便了。
  
  上述例子的第二部分揭示出這樣一個問題:對于由基本數據類型構成的數組,它們的運作方式與對象數組極為相似,只是前者直接包容了基本類型的數據值。
  
  1. 基本數據類型集合
  
  集合類只能容納對象句柄。但對一個數組,卻既可令其直接容納基本類型的數據,亦可容納指向對象的句柄。利用象Integer、Double之類的“封裝器”類,可將基本數據類型的值置入一個集合里。但正如本章后面會在
WordCount.java例子中講到的那樣,用于基本數據類型的封裝器類只是在某些場合下才能發揮作用。無論將基本類型的數據置入數組,還是將其封裝進入位于集合的一個類內,都涉及到執行效率的問題。顯然,若能創建和訪問一個基本數據類型數組,那么比起訪問一個封裝數據的集合,前者的效率會高出許多。
  
  當然,假如預備一種基本數據類型,同時又想要集合的靈活性(在需要的時候可自動擴展,騰出更多的空間),就不宜使用數組,必須使用由封裝的數據構成的一個集合。大家或許認為針對每種基本數據類型,都應有一種非凡類型的Vector。但Java并未提供這一特性。某些形式的建模機制或許會在某一天幫助Java更好地解決這個問題(注釋①)。
  
 ?、伲哼@兒是C++比Java做得好的一個地方,因為C++通過template要害字提供了對“參數化類型”的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产免费一区二区三区在线能观看| 色老头一区二区三区在线观看| 亚洲久久久久久久久久久| 欧美一区二区视频97| 一区二区三区精品99久久| 久久免费福利视频| 色偷偷88888欧美精品久久久| 欧美巨大黑人极品精男| 91国内揄拍国内精品对白| 久久久精品999| 欧美成人免费在线视频| 538国产精品一区二区在线| 欧美肥婆姓交大片| 26uuu日韩精品一区二区| 久久成人人人人精品欧| 中文字幕在线看视频国产欧美在线看完整| 亚洲天堂男人的天堂| 久久久精品视频在线观看| 51午夜精品视频| 日本高清不卡的在线| 97碰碰碰免费色视频| 在线视频欧美日韩精品| 91在线视频导航| 国产成人精品久久久| 国内免费久久久久久久久久久| 久久久久久久激情视频| 91国语精品自产拍在线观看性色| 欧美激情一区二区三区在线视频观看| 亚洲欧美在线一区| 国产精品盗摄久久久| 操日韩av在线电影| 欧洲一区二区视频| 亚洲国产高清福利视频| 91精品国产九九九久久久亚洲| 日本精品久久久久久久| 中文在线资源观看视频网站免费不卡| 亚洲已满18点击进入在线看片| 国产成人精品电影久久久| 欧美重口另类videos人妖| 一区二区中文字幕| 中文字幕亚洲色图| 5252色成人免费视频| 成人激情在线观看| 欧美午夜片在线免费观看| 国产+成+人+亚洲欧洲| 插插插亚洲综合网| 丝袜美腿精品国产二区| 国产精品久久久久av| 91伊人影院在线播放| 色综合老司机第九色激情| 国产精品99久久久久久久久久久久| 久久久久久久久电影| 欧美在线视频在线播放完整版免费观看| 欧美日产国产成人免费图片| 日本成人免费在线| 国产精品久久久久久久久久免费| 国色天香2019中文字幕在线观看| 久久久视频精品| 亚洲一区免费网站| 日韩视频免费中文字幕| 久久综合免费视频| 国产一区二区日韩精品欧美精品| 少妇av一区二区三区| 欧洲精品在线视频| 成人免费午夜电影| 96sao精品视频在线观看| 久热爱精品视频线路一| 欧美日韩在线视频首页| 成人免费网视频| 国产精品一区二区三区免费视频| 亚洲人成在线观看网站高清| 国产精品91在线观看| 亚洲在线观看视频| 欧美专区中文字幕| 亚洲精品美女久久久久| 日韩电影中文字幕| 91国语精品自产拍在线观看性色| 久久中文字幕一区| 亚洲国产福利在线| 亚洲一区二区久久久久久| 91老司机在线| 亚洲一区二区精品| 91国内产香蕉| 欧美日韩不卡合集视频| 国产精品精品视频一区二区三区| 国产精品久久久久aaaa九色| 91中文精品字幕在线视频| 国产视频999| 日韩天堂在线视频| 亚洲国产精品va在线看黑人| 国产91网红主播在线观看| 国产亚洲精品久久久久久| 成人亲热视频网站| 日韩av一区二区在线| 欧美激情一区二区三区成人| 亚洲美女黄色片| 97色在线播放视频| 精品福利樱桃av导航| 中文字幕久久久av一区| 亚洲激情视频网站| 性色av一区二区三区在线观看| 亚洲免费小视频| 欧美精品在线免费播放| 国产精品视频免费观看www| 精品国产欧美一区二区三区成人| 国产一区二区三区在线观看网站| 国产精品久久99久久| 欧美黑人巨大精品一区二区| 国产精品∨欧美精品v日韩精品| 欧美视频在线观看免费网址| 亚洲最大的免费| 亚洲自拍另类欧美丝袜| 国产高清在线不卡| 成人国产精品av| 国产欧美久久久久久| 欧美日韩国产二区| 亚洲国产精品福利| 国产精品99久久久久久久久| 欧美限制级电影在线观看| 色播久久人人爽人人爽人人片视av| 亚洲午夜激情免费视频| 国模精品视频一区二区三区| 欧美在线免费视频| 久久成人精品一区二区三区| 国产在线视频2019最新视频| 91在线观看免费高清完整版在线观看| 国产小视频国产精品| 亚洲成人精品久久久| 亚洲无亚洲人成网站77777| 亚洲激情成人网| 国产成+人+综合+亚洲欧美丁香花| 久久国产精品亚洲| 欧美巨乳在线观看| 亚洲欧美日韩在线高清直播| 91精品久久久久久久久青青| 国产美女直播视频一区| 中国china体内裑精亚洲片| 色www亚洲国产张柏芝| 国产亚洲日本欧美韩国| 国产一区二区三区在线播放免费观看| 欧美激情免费看| 欧美肥老妇视频| 丝袜亚洲另类欧美重口| 精品久久香蕉国产线看观看亚洲| 91久久综合亚洲鲁鲁五月天| 日韩欧美在线中文字幕| 亚洲精品少妇网址| 欧美成人手机在线| 午夜精品视频网站| 亚洲新声在线观看| 国产精品∨欧美精品v日韩精品| 亚洲国产欧美一区二区丝袜黑人| 亚洲成人av在线| 久久夜精品va视频免费观看| 久久久这里只有精品视频| 国产精品一区二区三区在线播放| 日韩欧美在线观看视频| 精品自在线视频| 久久久久久久91| 成人黄色免费在线观看| 亚洲福利影片在线| 国产精品久久久久7777婷婷| 国产偷国产偷亚洲清高网站| 1769国内精品视频在线播放|