青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

woaidongmao

文章均收錄自他人博客,但不喜標題前加-[轉(zhuǎn)貼],因其丑陋,見諒!~
隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
數(shù)據(jù)加載中……

Java語言深入:關(guān)于java數(shù)組的深度思考

剛剛開始接觸java數(shù)組的人都會聽到一句類似的話:java是純面向?qū)ο蟮恼Z言,他的數(shù)組也是一個對象。

  于是乎,我就按照一個對象的方式來使用數(shù)組,心安理得。直到我接觸到C的數(shù)組后,才發(fā)現(xiàn)將數(shù)組作為一個類來使用在實現(xiàn)上是多么的不自然

  首先我們看一下表面現(xiàn)象,數(shù)組創(chuàng)建的時候采用的是如下語句:

  MyClass[] arr = new MyClass[9]

  而普通類采用的是如下語句:

  MyClass obj = new MyClass();

  就是說,創(chuàng)建數(shù)組的時候不使用小括號傳參。使得數(shù)組和普通類看起來就有很多不同,因為小括號里的參數(shù)是傳遞給構(gòu)造方法的,進而讓人感覺數(shù)組類是沒有構(gòu)造方法的。

  再往深了想,還有很多讓人感覺不自然的東西。可以肯定的是,java確實將數(shù)組作為了一個類來處理。還是用上面的例子說明:

  可以通過以下方法得到MyClass[]Class實例:

  arr.getClass()或MyClass[].class.這樣,我就可以向數(shù)組類里面窺探了。

  Class clazz = MyClass[].class

  System.out.printlnclazz.getConstructors()。length);

  打印出來的結(jié)果是0;證明數(shù)組類確實沒有構(gòu)造方法。

  如果強行執(zhí)行clazz.newInstance();就會得到下面的錯誤。

  java.lang.InstantiationException [Larraytest.MyClass

  證明數(shù)組類不能夠通過普通的反射方式來創(chuàng)建一個實例。

  再看看數(shù)組類的廬山真面目

  System.out.printlnclazz);

  輸出是:

  [Larraytest.MyClass

  對Java Class文件結(jié)構(gòu)稍有了結(jié)就知道,這個字符串的意思就是一個元素類型為arraytest.MyClass的一維數(shù)組。也就是說,數(shù)組類型不是和普通類一樣,以一個全限定路徑名+類名來作為自己的唯一標示的,而是以[+一個或者多個L+數(shù)組元素類全限定路徑+類來最為唯一標示的。這個()也是數(shù)組和普通類的區(qū)別。而這個區(qū)別似乎在某種程度上說明數(shù)組和普通java類在實現(xiàn)上有很大區(qū)別。因為java虛擬機(java指令集)在處理數(shù)組類和普通類的時候,肯定會做出區(qū)分。我猜想,可能會有專門的java虛擬機指令來處理數(shù)組。

  既然我們可以得到數(shù)組的Class類實例,就說明肯定需要調(diào)用ClassLoaderdefineClass(不一定非要是loadClass方法)方法,來構(gòu)造一個Class實例。java虛擬機規(guī)范規(guī)定,任何一個可以被加載的類,如果其類文件存儲在文件系統(tǒng)上,那么一個*.class文件只能存儲一個類信息,也就是說,數(shù)組類的信息不可能以類文件的形式存儲在本地磁盤上(否則任意一個類都要配有255個數(shù)組類了……),既然這樣,那就說明java虛擬機肯定內(nèi)置了一塊用來聲明數(shù)組類的數(shù)據(jù)(不管是幾級數(shù)組)。這是符合java虛擬機規(guī)范的,規(guī)范規(guī)定class類數(shù)據(jù)可以來自任意介質(zhì),包括本地磁盤、網(wǎng)絡、數(shù)據(jù)庫、內(nèi)存等等。

  分析到這里,我基本上可以肯定:java對數(shù)組對象化的操作的支持是指令級的,也就是說java虛擬機有專門針對數(shù)組的指令。數(shù)組的Class類實例是java虛擬機動態(tài)創(chuàng)建動態(tài)加載的,其結(jié)構(gòu)與普通java類的Class實例有一些不同。

  JDK API中有一個java.lang.reflect.Array類,這個類提供了很多方法(絕大多數(shù)是native方法,這在另一個方面證明了java對數(shù)組的支持是專用指令支持的,否則用本地方法干嘛^_^),用來彌補我們對數(shù)組操作的局限性。

  下面這句話用來創(chuàng)建一個一維的、長度為10的、類型為arraytest.MyClass的數(shù)組:

  arraytest.MyClass[] arr = arraytest.MyClass[] Array.newInstancearraytest.MyClass 10);

  下面這句話用來創(chuàng)建一個二維的、35的、類型為arraytest.MyClass的數(shù)組:

  int[] arrModel = new int[]{35}

  Object arrObj = Array.newInstanceSub.class arrModel);

  當然你可以用一個數(shù)組的引用指向上面的二維數(shù)組,這里我們用一個Object的引用指向他。

  使用的時候,我們也是可以利用Array類提供的方法來實現(xiàn):

  System.out.printlnArray.getLengtharrObj);//第一維長度為3

  System.out.printlnArray.getLengthArray.getarrObj 2)));//第二維長度為5,這里如果寫3,就會得到你意想之中的

  java.lang.ArrayIndexOutOfBoundsException

  打印結(jié)果是如我所想的:

  3

  5

  對于數(shù)組的Class類實例,還有一些奇怪的現(xiàn)象:在運行代碼java.lang.reflect.Field fieldarr = clazz.getField"length");的時候,會拋出異常:java.lang.NoSuchFieldException length,這似乎在說數(shù)組類沒有length這個域,而這個域其實是我們用的最多的一個(也就是說這個域是肯定存在的)。我想關(guān)于數(shù)組的Class類實例、數(shù)組的實現(xiàn)等,還有很多貓膩在里面。

  順便說一句,java數(shù)組最多只能是255維的。這個讓人看到了C的影子,嘿嘿。

  “Java把數(shù)組當作一個java類來處理說起來容易,用起來自然,但是細細想來,還是有很多不簡單的地方呀。

posted on 2009-08-10 14:38 肥仔 閱讀(243) 評論(1)  編輯 收藏 引用 所屬分類: Web-后臺

評論

# re: Java語言深入:關(guān)于java數(shù)組的深度思考  回復  更多評論   

顯然是因為java在支持數(shù)組的時候還不支持泛型導致的,.net上面沒這個本質(zhì)上的區(qū)別。
2009-08-10 19:20 | 陳梓瀚(vczh)
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            狂野欧美激情性xxxx| 久久综合网络一区二区| 永久555www成人免费| 亚洲精品综合精品自拍| 国产一区香蕉久久| av成人免费在线观看| 91久久亚洲| 久久精品国产欧美亚洲人人爽| 中文高清一区| 欧美福利网址| 欧美激情精品久久久久久大尺度 | 亚洲一区二区影院| 亚洲美女av黄| 麻豆精品在线观看| 久久久夜夜夜| 国产乱码精品| 亚洲四色影视在线观看| 日韩视频免费| 欧美成人免费va影院高清| 久久国产成人| 国产精品一香蕉国产线看观看| 亚洲精品一区在线观看| 亚洲国产日韩欧美| 久久亚洲一区二区三区四区| 久久精品亚洲国产奇米99| 国产精品一区二区三区四区 | 亚洲人成亚洲人成在线观看| 又紧又大又爽精品一区二区| 欧美与欧洲交xxxx免费观看| 性欧美video另类hd性玩具| 欧美性生交xxxxx久久久| 亚洲精品国产系列| 99国产精品久久久久久久| 麻豆精品在线播放| 亚洲第一在线综合网站| 亚洲精品一二| 欧美视频福利| 亚洲欧美日韩精品| 久久国产精品一区二区三区| 国产亚洲精品v| 久久九九有精品国产23| 免费久久精品视频| 最新高清无码专区| 欧美精品一区二区三区久久久竹菊| 亚洲高清资源| 亚洲一区二区3| 国产精品一级二级三级| 久久精品国产99精品国产亚洲性色| 久久久综合香蕉尹人综合网| 亚洲国内自拍| 欧美日韩直播| 欧美一区激情| 亚洲第一中文字幕在线观看| 亚洲天堂第二页| 国产日韩欧美视频在线| 另类春色校园亚洲| 99这里只有精品| 久久国产精品色婷婷| 亚洲国产精品专区久久| 欧美日韩在线不卡一区| 欧美一区在线看| 亚洲精品系列| 久久蜜桃精品| 亚洲图片在线观看| 曰韩精品一区二区| 欧美小视频在线观看| 久久久噜噜噜久久中文字免| 亚洲精品久久久久久久久久久| 亚洲欧美激情在线视频| 尤物yw午夜国产精品视频| 欧美日韩国产区| 久久精品色图| 正在播放日韩| 亚洲国产高清自拍| 久久免费99精品久久久久久| 9人人澡人人爽人人精品| 国产一区二区三区四区三区四| 欧美韩日一区二区| 久久久九九九九| 国产精品99久久久久久人| 免费试看一区| 欧美在线精品一区| aa亚洲婷婷| 亚洲国产另类精品专区 | 欧美人与禽猛交乱配视频| 欧美一区二区三区播放老司机| 最新国产成人av网站网址麻豆| 久久精品视频一| 亚洲自啪免费| 宅男精品视频| 亚洲精品美女| 亚洲福利国产精品| 国产一区二区毛片| 国产精品一区二区三区久久久| 欧美精品久久久久久久免费观看| 久久精视频免费在线久久完整在线看| 一本色道久久| 一本久久a久久免费精品不卡| 亚洲成人资源网| 欧美大片免费观看| 免费观看在线综合色| 久久噜噜亚洲综合| 久久久国产亚洲精品| 亚洲欧美日韩一区二区在线| 亚洲一区二区三区777| 99天天综合性| 99热精品在线| 亚洲色图制服丝袜| 一区二区三区欧美成人| 亚洲精品乱码久久久久久黑人| 亚洲高清久久久| 亚洲高清123| 亚洲激情国产| 日韩香蕉视频| 一本色道久久88精品综合| 亚洲美女电影在线| 99精品视频一区二区三区| 夜夜爽夜夜爽精品视频| 一区二区三区产品免费精品久久75 | 日韩视频在线免费观看| 亚洲精品国久久99热| 亚洲精品激情| 亚洲一区二区高清| 亚洲免费在线视频| 欧美主播一区二区三区美女 久久精品人 | 亚洲欧美一区在线| 欧美在线视频一区二区三区| 欧美一区二区免费观在线| 久久精品一区二区三区中文字幕| 久久色中文字幕| 欧美国产日韩一区二区在线观看 | 妖精视频成人观看www| 在线亚洲精品福利网址导航| 亚洲欧美成人| 久久久免费精品| 亚洲风情亚aⅴ在线发布| 亚洲精品视频一区| 亚洲免费小视频| 久久久国产精彩视频美女艺术照福利| 老司机精品视频一区二区三区| 欧美激情区在线播放| 国产精品久久久久久久电影| 国产日韩一区| 亚洲美女黄色片| 亚洲欧美一区二区激情| 久热国产精品视频| 亚洲日本欧美在线| 欧美一区二区三区的| 欧美成人黑人xx视频免费观看| 国产精品成人aaaaa网站 | 国产综合久久| 日韩一区二区久久| 久久国产精品亚洲77777| 亚洲国产欧美一区二区三区同亚洲 | 日韩午夜激情av| 欧美亚洲系列| 欧美精品一区二区三区在线播放| 国产精品久久久久久久久久直播| 伊人久久亚洲热| 亚洲欧美精品| 亚洲国产三级| 久久精品视频在线| 欧美亚洲第一区| 亚洲欧洲日本国产| 欧美一区激情| 亚洲免费黄色| 蜜桃av噜噜一区二区三区| 国产精品视频男人的天堂| 亚洲日本精品国产第一区| 久久人91精品久久久久久不卡| 一本一本a久久| 欧美激情综合五月色丁香小说 | 在线成人中文字幕| 欧美在线啊v| 在线中文字幕日韩| 欧美激情第二页| 亚洲国产网站| 久久综合色一综合色88| 午夜精品久久久久久久久| 欧美视频免费看| 一区二区三区高清| 亚洲国产一区二区三区a毛片| 久久久www免费人成黑人精品 | 国产日韩精品一区二区三区在线| 一区二区精品在线| 亚洲国产高清在线| 蜜臀va亚洲va欧美va天堂| 一区在线免费| 麻豆精品在线视频| 欧美中在线观看| 国内精品久久久久久影视8| 欧美有码在线观看视频| 亚洲视频在线观看网站| 国产精品sss| 午夜精品视频在线观看| 99在线精品视频| 国产精品二区在线| 午夜激情综合网| 午夜精品999| 国产在线国偷精品产拍免费yy|