激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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

香港云服务器
服務器之家 - 編程語言 - Java教程 - Java 數組分析及簡單實例

Java 數組分析及簡單實例

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

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

Java 數組

 一、什么是數組

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

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

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

       不管在其他語言中數組是什么,在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

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

       我們再看如下示例:

?
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("一維數組:" + array_00.getClass().getName());
    int[][] array_01 = new int[10][10];
    System.out.println("二維數組:" + array_01.getClass().getName());
     
    int[][][] array_02 = new int[10][10][10];
    System.out.println("三維數組:" + array_02.getClass().getName());
  }
}
-----------------Output:
一維數組:[I
二維數組:[[I
三維數組:[[[I

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

?
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

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

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

?
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沒有生命任何成員變量、成員方法、構造函數、Annotation甚至連length成員變量這個都沒有,它就是一個徹徹底底的空類。沒有聲明length,那么我們array.length時,編譯器怎么不會報錯呢?確實,數組的length是一個非常特殊的成員變量。我們知道數組的是Object的直接之類,但是Object是沒有length這個成員變量的,那么length應該是數組的成員變量,但是從上面的示例中,我們發現數組根本就沒有任何成員變量,這兩者不是相互矛盾么?

?
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方法的字節碼:

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

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

       二、數組的使用方法

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

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

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

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

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

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

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

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

延伸 · 閱讀

精彩推薦
280
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 欧美一区二区黄色 | 国产精品久久久久久婷婷天堂 | 九九精品在线播放 | 素人视频免费观看 | 日本在线播放一区二区三区 | 91久久另类重口变态 | 国产免费观看a大片的网站 欧美成人一级 | av电影在线网站 | 久久在草 | 国产男女 爽爽爽爽视频 | 成人偷拍片视频在线观看 | 精品国产欧美一区二区 | 今井夏帆av一区二区 | 视频一区二区中文字幕 | 欧美高清一级片 | 免费播放欧美毛片 | 久久天堂| 成av人在线观看 | 曰韩一二三区 | 日本人乱人乱亲乱色视频观看 | 天天夜干 | 免费国产之a视频 | 欧美一级特黄aaaaaaa什 | 羞羞视频免费网站含羞草 | 国产一区二区视频观看 | 一区二区三区欧美在线观看 | 小雪奶水翁胀公吸小说最新章节 | 日本一区二区精品 | 黄色作爱视频 | 日日草日日干 | 日韩深夜视频 | 国产亚洲网 | 美女91视频 | 欧美日韩手机在线观看 | 男女污污视频网站 | 国产在线精品一区二区三区不卡 | 97超碰资源站 | 男男羞羞视频网站国产 | 久久资源总站 | 日韩在线欧美在线 | 国产一区二区三区四区在线 |