亚洲免费乱码视频,日韩 欧美 国产 动漫 一区,97在线观看免费视频播国产,中文字幕亚洲图片

      1. <legend id="ppnor"></legend>

      2. 
        
        <sup id="ppnor"><input id="ppnor"></input></sup>
        <s id="ppnor"></s>

        關(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)造方法的。
            再往深了想,還有很多讓人感覺不自然的東西??梢钥隙ǖ氖牵琷ava確實將數(shù)組作為了一個類來處理。還是用上面的例子說明:
            可以通過以下方法得到MyClass[]的Class實例:arr.getClass()或MyClass[].class。這樣,我就可以向數(shù)組類里面“窺探”了。
            Class clazz = MyClass[].class;
            System.out.println(clazz.getConstructors().length);
            打印出來的結(jié)果是0;證明數(shù)組類確實沒有構(gòu)造方法。
            如果強行執(zhí)行clazz.newInstance();就會得到下面的錯誤。
            java.lang.InstantiationException: [Larraytest.MyClass;
            證明數(shù)組類不能夠通過普通的反射方式來創(chuàng)建一個實例。
            再看看數(shù)組類的“廬山真面目”:
            System.out.println(clazz);
            輸出是:
            [Larraytest.MyClass
            對Java Class文件結(jié)構(gòu)稍有了結(jié)就知道,這個字符串的意思就是一個元素類型為arraytest.MyClass的一維數(shù)組。也就是說,數(shù)組類型不是和普通類一樣,以一個全限定路徑名+類名來作為自己的標(biāo)示的,而是以[+一個或者多個L+數(shù)組元素類全限定路徑+類來最為標(biāo)示的。這個()也是數(shù)組和普通類的區(qū)別。而這個區(qū)別似乎在某種程度上說明數(shù)組和普通java類在實現(xiàn)上有很大區(qū)別。因為java虛擬機(java指令集)在處理數(shù)組類和普通類的時候,肯定會做出區(qū)分。筆者猜想,可能會有專門的java虛擬機指令來處理數(shù)組。