最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java 數組分析及簡單實例

 更新時間:2017年03月03日 15:28:46   投稿:lqh  
這篇文章主要介紹了Java 數組分析及簡單實例的相關資料,在Java中它就是對象,一個比較特殊的對象,需要的朋友可以參考下

Java 數組

 一、什么是數組

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

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

       還有更深的,那就是數組是一個特殊的對象?。。▽τ谶@個LZ理解的不是很好,對JVM也沒有看,所以見解有限)。

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

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那幫天才肯定對數組的底層肯定做了特殊的處理。

       我們再看如下示例:

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 

       通過這個實例我們知道:[代表了數組的維度,一個[表示一維,兩個[表示二維??梢院唵蔚恼f數組的類名由若干個'['和數組元素類型的內部名稱組成。不清楚我們再看:

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類在實現上存在很大的區(qū)別,也許可以利用這個區(qū)別來使得JVM在處理數組和普通java類時作出區(qū)分。

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

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是沒有l(wèi)ength這個成員變量的,那么length應該是數組的成員變量,但是從上面的示例中,我們發(fā)現數組根本就沒有任何成員變量,這兩者不是相互矛盾么?

public class Main { 
  public static void main(String[] args) { 
    int a[] = new int[2]; 
    int i = a.length; 
  } 
} 

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

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

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

       二、數組的使用方法

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

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

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

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

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

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

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

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

相關文章

  • 手把手教你如何獲取微信用戶openid

    手把手教你如何獲取微信用戶openid

    眾所周知小程序的openid相當重要,它是用戶的唯一標識id,牽扯的支付,登錄,授權等,下面這篇文章主要給大家介紹了關于如何獲取微信用戶openid的相關資料,需要的朋友可以參考下
    2023-02-02
  • 關于springboot 中使用httpclient或RestTemplate做MultipartFile文件跨服務傳輸的問題

    關于springboot 中使用httpclient或RestTemplate做MultipartFile文件跨服務傳輸

    這篇文章主要介紹了關于springboot 中使用httpclient或RestTemplate做MultipartFile文件跨服務傳輸的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • Java?NIO?Channel?使用詳情

    Java?NIO?Channel?使用詳情

    這篇文章主要介紹了Java?NIO?Channel?使用詳情,文章圍繞主題展開詳細內容需要的小伙伴可以參考一下,希望對你的學習有所幫助
    2022-04-04
  • java多線程之wait(),notify(),notifyAll()的詳解分析

    java多線程之wait(),notify(),notifyAll()的詳解分析

    本篇文章是對java多線程 wait(),notify(),notifyAll()進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • SpringBoot中fastjson自定義序列化和反序列化的實戰(zhàn)分享

    SpringBoot中fastjson自定義序列化和反序列化的實戰(zhàn)分享

    在fastjson庫中,為了提供靈活的序列化和反序列化機制,設計了一系列的擴展點,以下是在SpringBoot和SpringClould環(huán)境中對這些擴展點的詳細介紹及其實戰(zhàn)使用,通過代碼示例講解的非常詳細,需要的朋友可以參考下
    2024-07-07
  • java中對象和Map互相轉換的幾種常見方式舉例

    java中對象和Map互相轉換的幾種常見方式舉例

    Map在日常開發(fā)應用中的頻率很高,最常用的實現類是HashMap和有序的TreeMap,下面這篇文章主要給大家介紹了關于java中對象和Map互相轉換的幾種常見方式舉例,需要的朋友可以參考下
    2024-01-01
  • java中BIO、NIO、AIO都有啥區(qū)別

    java中BIO、NIO、AIO都有啥區(qū)別

    這篇文章主要介紹了java中BIO、NIO、AIO都有啥區(qū)別,IO模型就是說用什么樣的通道進行數據的發(fā)送和接收,Java共支持3種網絡編程IO模式:BIO,NIO,AIO,文中有非常詳細的代碼示例,對正在學習java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • 一文掌握Spring的創(chuàng)建與使用

    一文掌握Spring的創(chuàng)建與使用

    這篇文章詳細介紹了spring的創(chuàng)建與使用,文章中有詳細的代碼示例和圖片介紹,對學習有一定的而參考價值,需要的同學可以參考一下
    2023-04-04
  • jpa使用注解生成表時無外鍵問題及解決

    jpa使用注解生成表時無外鍵問題及解決

    這篇文章主要介紹了jpa使用注解生成表時無外鍵問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • SpringBoot請求參數傳遞與接收說明小結

    SpringBoot請求參數傳遞與接收說明小結

    這篇文章主要介紹了SpringBoot請求參數傳遞與接收,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12

最新評論

巫山县| 鞍山市| 襄垣县| 东平县| 嘉峪关市| 平南县| 三穗县| 白河县| 句容市| 平度市| 甘孜县| 名山县| 石渠县| 宁明县| 德昌县| 桃源县| 平邑县| 太白县| 本溪市| 德州市| 淮南市| 南投县| 茂名市| 桦甸市| 邵阳市| 凤台县| 库伦旗| 合作市| 镇雄县| 确山县| 沁阳市| 城步| 都昌县| 吐鲁番市| 南岸区| 洛宁县| 大名县| 奉化市| 万年县| 峡江县| 铁岭县|