一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java 數(shù)組分析及簡單實例

Java 數(shù)組分析及簡單實例

2020-08-23 15:17Java之家 Java教程

這篇文章主要介紹了Java 數(shù)組分析及簡單實例的相關資料,在Java中它就是對象,一個比較特殊的對象,需要的朋友可以參考下

Java 數(shù)組

 一、什么是數(shù)組

       數(shù)組?什么是數(shù)組?在我印象中的數(shù)組是應該這樣的:通過new關鍵字創(chuàng)建并組裝他們,通過使用整形索引值訪問它的元素,并且它的尺寸是不可變的!

       但是這只是數(shù)組的最表面的東西!深一點?就是這樣:數(shù)組是一個簡單的復合數(shù)據(jù)類型,它是一系列有序數(shù)據(jù)的集合,它當中的每一個數(shù)據(jù)都具有相同的數(shù)據(jù)類型,我們通過數(shù)組名加上一個不會越界下標值來唯一確定數(shù)組中的元素。

       還有更深的,那就是數(shù)組是一個特殊的對象!!(對于這個LZ理解的不是很好,對JVM也沒有看,所以見解有限)。

       不管在其他語言中數(shù)組是什么,在Java中它就是對象。一個比較特殊的對象。

?
1
2
3
4
5
6
7
8
9
10
public class Test {
  public static void main(String[] args) {
    int[] array = new int[10];
    System.out.println("array的父類是:" + array.getClass().getSuperclass());
    System.out.println("array的類名是:" + array.getClass().getName());
  }
}
-------Output:
array的父類是:class java.lang.Object
array的類名是:[I

       從上面示例可以看出,數(shù)組的是Object的直接子類,它屬于“第一類對象”,但是它又與普通的java對象存在很大的不同,從它的類名就可以看出:[I,這是什么東東??在JDK中我就沒有找到這個類,話說這個"[I”都不是一個合法標識符。怎么定義成類啊?所以我認為SUM那幫天才肯定對數(shù)組的底層肯定做了特殊的處理。

       我們再看如下示例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Test {
  public static void main(String[] args) {
    int[] array_00 = new int[10];
    System.out.println("一維數(shù)組:" + array_00.getClass().getName());
    int[][] array_01 = new int[10][10];
    System.out.println("二維數(shù)組:" + array_01.getClass().getName());
     
    int[][][] array_02 = new int[10][10][10];
    System.out.println("三維數(shù)組:" + array_02.getClass().getName());
  }
}
-----------------Output:
一維數(shù)組:[I
二維數(shù)組:[[I
三維數(shù)組:[[[I

       通過這個實例我們知道:[代表了數(shù)組的維度,一個[表示一維,兩個[表示二維。可以簡單的說數(shù)組的類名由若干個'['和數(shù)組元素類型的內部名稱組成。不清楚我們再看:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
public class Test {
  public static void main(String[] args) {
    System.out.println("Object[]:" + Object[].class);
    System.out.println("Object[][]:" + Object[][].class);
    System.err.println("Object[][][]:" + Object[][][].class);
    System.out.println("Object:" + Object.class);
  }
}
---------Output:
Object[]:class [Ljava.lang.Object;
Object[][]:class [[Ljava.lang.Object;
Object[][][]:class [[[Ljava.lang.Object;
Object:class java.lang.Object

       從這個實例我們可以看出數(shù)組的“廬山真面目”。同時也可以看出數(shù)組和普通的Java類是不同的,普通的java類是以全限定路徑名+類名來作為自己的唯一標示的,而數(shù)組則是以若干個[+L+數(shù)組元素類全限定路徑+類來最為唯一標示的。這個不同也許在某種程度上說明了數(shù)組也普通java類在實現(xiàn)上存在很大的區(qū)別,也許可以利用這個區(qū)別來使得JVM在處理數(shù)組和普通java類時作出區(qū)分。

       我們暫且不論這個[I是什么東東,是由誰來聲明的,怎么聲明的(這些我現(xiàn)在也不知道!但是有一點可以確認:這個是在運行時確定的)。先看如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Test {
  public static void main(String[] args) {
    int[] array = new int[10];
    Class clazz = array.getClass();  
    System.out.println(clazz.getDeclaredFields().length);  
    System.out.println(clazz.getDeclaredMethods().length);  
    System.out.println(clazz.getDeclaredConstructors().length);  
    System.out.println(clazz.getDeclaredAnnotations().length);  
    System.out.println(clazz.getDeclaredClasses().length);  
  }
}
----------------Output:
0
0
0
0
0

       從這個運行結果可以看出,我們親愛的[I沒有生命任何成員變量、成員方法、構造函數(shù)、Annotation甚至連length成員變量這個都沒有,它就是一個徹徹底底的空類。沒有聲明length,那么我們array.length時,編譯器怎么不會報錯呢?確實,數(shù)組的length是一個非常特殊的成員變量。我們知道數(shù)組的是Object的直接之類,但是Object是沒有l(wèi)ength這個成員變量的,那么length應該是數(shù)組的成員變量,但是從上面的示例中,我們發(fā)現(xiàn)數(shù)組根本就沒有任何成員變量,這兩者不是相互矛盾么?

?
1
2
3
4
5
6
public class Main {
  public static void main(String[] args) {
    int a[] = new int[2];
    int i = a.length;
  }
}

      打開class文件,得到main方法的字節(jié)碼:

?
1
2
3
4
5
6
7
0 iconst_2          //將int型常量2壓入操作數(shù)棧 
  1 newarray 10 (int)     //將2彈出操作數(shù)棧,作為長度,創(chuàng)建一個元素類型為int, 維度為1的數(shù)組,并將數(shù)組的引用壓入操作數(shù)棧 
  3 astore_1          //將數(shù)組的引用從操作數(shù)棧中彈出,保存在索引為1的局部變量(即a)中 
  4 aload_1          //將索引為1的局部變量(即a)壓入操作數(shù)棧 
  5 arraylength        //從操作數(shù)棧彈出數(shù)組引用(即a),并獲取其長度(JVM負責實現(xiàn)如何獲取),并將長度壓入操作數(shù)棧 
  6 istore_2          //將數(shù)組長度從操作數(shù)棧彈出,保存在索引為2的局部變量(即i)中 
  7 return           //main方法返回

     在這個字節(jié)碼中我們還是沒有看到length這個成員變量,但是看到了這個:arraylength ,這條指令是用來獲取數(shù)組的長度的,所以說JVM對數(shù)組的長度做了特殊的處理,它是通過arraylength這條指令來實現(xiàn)的。

       二、數(shù)組的使用方法

       通過上面算是對數(shù)組是什么有了一個初步的認識,下面將簡單介紹數(shù)組的使用方法。  

      數(shù)組的使用方法無非就是四個步驟:聲明數(shù)組、分配空間、賦值、處理。

       聲明數(shù)組:就是告訴計算機數(shù)組的類型是什么。有兩種形式:int[] array、int array[]。

       分配空間:告訴計算機需要給該數(shù)組分配多少連續(xù)的空間,記住是連續(xù)的。array = new int[10];

       賦值:賦值就是在已經(jīng)分配的空間里面放入數(shù)據(jù)。array[0] = 1 、array[1] = 2……其實分配空間和賦值是一起進行的,也就是完成數(shù)組的初始化。有如下三種形式:

?
1
2
3
int a[] = new int[2];  //默認為0,如果是引用數(shù)據(jù)類型就為null
    int b[] = new int[] {1,2,3,4,5};  
    int c[] = {1,2,3,4,5};

      處理:就是對數(shù)組元素進行操作。通過數(shù)組名+有效的下標來確認數(shù)據(jù)。

        感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 天堂avav| 草莓香蕉绿巨人丝瓜榴莲污在线观看 | 日韩免费在线观看 | 成年看片免费高清观看 | 99精品99 | 色综合天天五月色 | 国产男女乱淫真视频全程播放 | 国产成人h综合亚洲欧美在线 | 亚洲精品高清中文字幕完整版 | 4p高h三男一女 | 国产男女爱视频在线观看 | 亚洲成年人免费网站 | 果冻传媒新在线观看免费 | 日韩精品1 | 欧美女人p | 免费国产午夜高清在线视频 | 亚洲欧美另类综合 | 亚洲另类中文字幕 | a级片在线播放 | 被黑人同学彻底征服全文小说阅读 | 韩国三级在线观看 完整版 韩国三级视频网站 | 狠狠燥 | 大肥臀风间由美 中文字幕 大东北chinesexxxx露脸 | 2018成年动漫在线观看 | 日本福利视频一区 | 四虎在线播放 | 日韩在线免费播放 | 久久re热在线视频精99 | 91久久线看在观草草青青 | 欧美日韩成人在线视频 | 欧美vpswindowssex 欧美va在线高清 | 波多野结衣家庭教师 | 亚洲午夜小视频 | 国产精品久久久久a影院 | 热久久最新 | 青草视频网站在线观看 | 精品国产日韩亚洲一区在线 | 99pao在线视频精品免费 | 男人与雌性宠物交啪啪小说 | 黑人与欧洲女子性大战 | 国产啪精品视频网给免丝袜 |