對java數(shù)組的一些理解

剛開始學(xué)習(xí)Java的時候一直搞不清除獲取數(shù)組的長度是用length()還是length泣港,現(xiàn)在不妨來深入了解一下數(shù)組的真實面目违寞。

我們不妨來看一下數(shù)組的源碼抵乓,誒店归,數(shù)組的類名叫什么刃麸?我們聲明一個int數(shù)組的時候用的是: int [] arr = new int[10];這樣的格式醒叁,

莫非int數(shù)組的類名叫做 int[],學(xué)過反射的朋友可能會知道,我們可以通過反射來獲取Java類的一些信息泊业,我們可以來試一下:

package com.liuwen.test;

import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;

public class Demo {

    public static void showModifier(int modifiers) {
        if (Modifier.isPublic(modifiers)) {
            System.out.print("public ");
        } else if (Modifier.isProtected(modifiers)) {
            System.out.print("protected ");
        } else if (Modifier.isPrivate(modifiers)) {
            System.out.print("private ");
        } else {
            System.out.print("");
        }
        if (Modifier.isFinal(modifiers)) {
            System.out.print(" final ");
        }
        if (Modifier.isAbstract(modifiers) && !Modifier.isInterface(modifiers)) {
            System.out.print(" abstract ");
        }
        if (Modifier.isInterface(modifiers)) {
            System.out.print(" interface ");
        } else {
            System.out.print(" class ");
        }
        System.out.println("");
    }

    public static void main(String[] args) {

        Class<int[]> clz = int[].class;
        // 獲取父類
        Class<?> superclass = clz.getSuperclass();// class java.lang.Object
        System.out.println("superclass:" + superclass);
        // 獲取類所在的包名
        Package packageName = clz.getPackage();// null
        System.out.println("Package:" + packageName);
        // 獲取類的注解
        Annotation[] declaredAnnotations = clz.getDeclaredAnnotations();
        if (null != declaredAnnotations && declaredAnnotations.length > 0) {
            for (Annotation ann : declaredAnnotations) {
                System.out.println(ann);
            }
        }
        // 獲取類的修飾符
        int modifiers = clz.getModifiers();
        System.out.print("modifier: ");
        showModifier(modifiers);

        // 獲取類的名稱
        String name = clz.getName();// [I
        System.out.println("className:" + name);
        // 獲取類的接口
        Class<?>[] interfaces = clz.getInterfaces();
        if (null != interfaces && interfaces.length > 0) {
            for (Class<?> cl : interfaces) {
                System.out.println(cl);
            }
        }
        // 獲取類構(gòu)造器
        Constructor<?>[] constructors = clz.getConstructors();// []
        if (null != interfaces && interfaces.length > 0) {
            for (Constructor<?> con : constructors) {
                System.out.println(con);
            }
        }
        // 獲取類成員變量
        Field[] declaredFields = clz.getDeclaredFields();// []
        if (null != declaredFields && declaredFields.length > 0) {
            for (Field field : declaredFields) {
                System.out.println(field);
            }
        }
        // 獲取類成員方法
        Method[] declaredMethods = clz.getDeclaredMethods();// []
        if (null != declaredMethods && declaredMethods.length > 0) {
            for (Method method : declaredMethods) {
                System.out.println(method);
            }
        }

    }
}

運行結(jié)果如下:

superclass:class java.lang.Object
Package:null
modifier: public  final  abstract  class 
className:[I
interface java.lang.Cloneable
interface java.io.Serializable

我們發(fā)現(xiàn)數(shù)組沒有成員變量把沼、成員方法,只有默認(rèn)構(gòu)造函數(shù)吁伺,此外饮睬,它實現(xiàn)了 Cloneable和Serializable 兩個接口,可以說它就是一個的空類箱蝠。
它的類名也比較特殊:
對基礎(chǔ)類型而言為:[+類型名稱的首字母大寫
對引用類型而言為:[L+類的全名稱+; eg [Ljava.lang.String;

對于1維數(shù)組而言有一個"["续捂,n維數(shù)組而言有n個"[",java數(shù)組最多有255維度垦垂,您不妨可以試一下
//256 維數(shù)組 報錯:數(shù)組類型維過多
int[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][] arr = new int[1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1];

OK,但是還有一個問題牙瓢,數(shù)組的length屬性是哪里冒出來的劫拗?我們不妨簡單地看一下:

public class ArrayLengthDemo {
    public static void main(String args[]) {
        int[] arr = new int[1];
        System.out.println(arr.length);
    }
}

反編譯一下 javap -c ArrayLengthDemo.class
結(jié)果如下

2017-02-25 14:22:41屏幕截圖.png

我們可以看到 main方法中序號為8處有一個arraylength指令,由此可見Java專門為數(shù)組定義了取得長度的指令矾克,數(shù)組的length不是數(shù)組的成員變量页慷,數(shù)組的實例是java虛擬機動態(tài)創(chuàng)建動態(tài)加載的。

以上便是對數(shù)組的一些探究胁附,圉于博主水平酒繁,理解可能有所偏差,還望各位大佬不吝指正控妻!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末州袒,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子弓候,更是在濱河造成了極大的恐慌郎哭,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件菇存,死亡現(xiàn)場離奇詭異夸研,居然都是意外死亡,警方通過查閱死者的電腦和手機依鸥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進(jìn)店門亥至,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人贱迟,你說我怎么就攤上這事姐扮。” “怎么了关筒?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵溶握,是天一觀的道長。 經(jīng)常有香客問我蒸播,道長睡榆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任袍榆,我火速辦了婚禮胀屿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘包雀。我一直安慰自己宿崭,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布才写。 她就那樣靜靜地躺著葡兑,像睡著了一般奖蔓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上讹堤,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天吆鹤,我揣著相機與錄音,去河邊找鬼洲守。 笑死疑务,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的梗醇。 我是一名探鬼主播知允,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼叙谨!你這毒婦竟也來了温鸽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤唉俗,失蹤者是張志新(化名)和其女友劉穎嗤朴,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體虫溜,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年股缸,在試婚紗的時候發(fā)現(xiàn)自己被綠了衡楞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡敦姻,死狀恐怖瘾境,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情镰惦,我是刑警寧澤迷守,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站旺入,受9級特大地震影響兑凿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜茵瘾,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一礼华、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拗秘,春花似錦圣絮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽捧请。三九已至,卻和暖如春棒搜,著一層夾襖步出監(jiān)牢的瞬間疹蛉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工帮非, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留氧吐,地道東北人。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓末盔,卻偏偏與公主長得像筑舅,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子陨舱,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,851評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法翠拣,類相關(guān)的語法,內(nèi)部類的語法游盲,繼承相關(guān)的語法误墓,異常的語法,線程的語...
    子非魚_t_閱讀 31,665評論 18 399
  • Win7下如何打開DOS控制臺益缎? a:開始--所有程序--附件--命令提示符 b:開始--搜索程序和文件--cmd...
    逍遙嘆6閱讀 1,602評論 4 12
  • 一莺奔、基本數(shù)據(jù)類型 注釋 單行注釋:// 區(qū)域注釋:/* */ 文檔注釋:/** */ 數(shù)值 對于byte類型而言...
    龍貓小爺閱讀 4,268評論 0 16
  • 作者:席慕蓉 美麗的夢和美麗的詩一樣欣范,都是可遇而不可求的,常常在最沒能料到的時刻里出現(xiàn)令哟。我喜歡那樣的夢恼琼,在夢里,一...
    Jimsir閱讀 313評論 0 0
  • 一刀切下去 值一千或者是十萬或者千萬 都是可以的 我們 都在幻想千萬 但事實或者現(xiàn)實 你就是一文不名的你 有什么不好么
    loo田閱讀 124評論 0 0