• 軟件測試技術
  • 軟件測試博客
  • 軟件測試視頻
  • 開源軟件測試技術
  • 軟件測試論壇
  • 軟件測試沙龍
  • 軟件測試資料下載
  • 軟件測試雜志
  • 軟件測試人才招聘
    暫時沒有公告

字號: | 推薦給好友 上一篇 | 下一篇

關于軟件測試開發技術java面向對象數組的深度思考

發布: 2009-11-16 11:17 | 作者: 不詳 | 來源: 領測軟件測試網采編 | 查看: 76次 | 進入軟件測試論壇討論

領測軟件測試網

關于軟件測試開發技術java面向對象數組的深度思考 java開發

關鍵字:java 面向對象

  剛剛開始接觸java數組的人都會聽到一句類似的話:java是純面向對象的語言,他的數組也是一個對象。于是乎,筆者就按照一個對象的方式來使用數組,心安理得。直到我接觸到C的數組后,才發現將數組作為一個類來使用在實現上是多么的“不自然”。

  首先我們看一下表面現象,數組創建的時候采用的是如下語句:

  MyClass[] arr = new MyClass[9];

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

  MyClass obj = new MyClass();

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

  再往深了想,還有很多讓人感覺不自然的東西?梢钥隙ǖ氖,java確實將數組作為了一個類來處理。還是用上面的例子說明:

  可以通過以下方法得到MyClass[]的Class實例:arr.getClass()或MyClass[].class。這樣,我就可以向數組類里面“窺探”了。

  Class clazz = MyClass[].class;

  System.out.println(clazz.getConstructors().length);

  打印出來的結果是0;證明數組類確實沒有構造方法。

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

  java.lang.InstantiationException: [Larraytest.MyClass;

  證明數組類不能夠通過普通的反射方式來創建一個實例。

  再看看數組類的“廬山真面目”:

  System.out.println(clazz);

  輸出是:

  [Larraytest.MyClass

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

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

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

 

延伸閱讀

文章來源于領測軟件測試網 http://www.anti-gravitydesign.com/

TAG: java JAVA Java 技術 面向對象 軟件測試 深度

21/212>

關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97