欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java 數(shù)組分析及簡(jiǎn)單實(shí)例

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

Java 數(shù)組

 一、什么是數(shù)組

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

       但是這只是數(shù)組的最表面的東西!深一點(diǎn)?就是這樣:數(shù)組是一個(gè)簡(jiǎn)單的復(fù)合數(shù)據(jù)類(lèi)型,它是一系列有序數(shù)據(jù)的集合,它當(dāng)中的每一個(gè)數(shù)據(jù)都具有相同的數(shù)據(jù)類(lèi)型,我們通過(guò)數(shù)組名加上一個(gè)不會(huì)越界下標(biāo)值來(lái)唯一確定數(shù)組中的元素。

       還有更深的,那就是數(shù)組是一個(gè)特殊的對(duì)象!?。▽?duì)于這個(gè)LZ理解的不是很好,對(duì)JVM也沒(méi)有看,所以見(jiàn)解有限)。

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

public class Test { 
  public static void main(String[] args) { 
    int[] array = new int[10]; 
    System.out.println("array的父類(lèi)是:" + array.getClass().getSuperclass()); 
    System.out.println("array的類(lèi)名是:" + array.getClass().getName()); 
  } 
} 
-------Output: 
array的父類(lèi)是:class java.lang.Object 
array的類(lèi)名是:[I 

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

       我們?cè)倏慈缦率纠?br />

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 

       通過(guò)這個(gè)實(shí)例我們知道:[代表了數(shù)組的維度,一個(gè)[表示一維,兩個(gè)[表示二維。可以簡(jiǎn)單的說(shuō)數(shù)組的類(lèi)名由若干個(gè)'['和數(shù)組元素類(lèi)型的內(nèi)部名稱(chēng)組成。不清楚我們?cè)倏矗?br />

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 

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

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

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 

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

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

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

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

     在這個(gè)字節(jié)碼中我們還是沒(méi)有看到length這個(gè)成員變量,但是看到了這個(gè):arraylength ,這條指令是用來(lái)獲取數(shù)組的長(zhǎng)度的,所以說(shuō)JVM對(duì)數(shù)組的長(zhǎng)度做了特殊的處理,它是通過(guò)arraylength這條指令來(lái)實(shí)現(xiàn)的。

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

       通過(guò)上面算是對(duì)數(shù)組是什么有了一個(gè)初步的認(rèn)識(shí),下面將簡(jiǎn)單介紹數(shù)組的使用方法。  

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

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

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

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

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

      處理:就是對(duì)數(shù)組元素進(jìn)行操作。通過(guò)數(shù)組名+有效的下標(biāo)來(lái)確認(rèn)數(shù)據(jù)。

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

相關(guān)文章

  • Spring?Boot?快速使用?HikariCP?連接池配置詳解

    Spring?Boot?快速使用?HikariCP?連接池配置詳解

    Spring Boot 2.x 將其作為默認(rèn)的連接池組件,項(xiàng)目中添加 spring-boot-starter-jdbc 或 spring-boot-starter-data-jpa 模塊后,HikariCP 依賴(lài)會(huì)被自動(dòng)引入,這篇文章主要介紹了Spring?Boot使用HikariCP連接池配置詳解,需要的朋友可以參考下
    2023-06-06
  • Java實(shí)現(xiàn)HTTP請(qǐng)求的4種方式總結(jié)

    Java實(shí)現(xiàn)HTTP請(qǐng)求的4種方式總結(jié)

    這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)HTTP請(qǐng)求的4種方式,在java開(kāi)發(fā)中,經(jīng)常遇到需要調(diào)用第三方提供的接口服務(wù)的需求,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下
    2023-08-08
  • Spring配置數(shù)據(jù)源流程與作用詳解

    Spring配置數(shù)據(jù)源流程與作用詳解

    這篇文章主要介紹了使用SpringBoot配置多數(shù)據(jù)源的經(jīng)驗(yàn)分享,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • 深入理解springboot中配置文件application.properties

    深入理解springboot中配置文件application.properties

    本文主要介紹了springboot中配置文件application.properties,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Spring @value和@PropertySource注解使用方法解析

    Spring @value和@PropertySource注解使用方法解析

    這篇文章主要介紹了Spring @value和@PropertySource注解使用方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 基于@ComponentScan注解及其XML配置方式

    基于@ComponentScan注解及其XML配置方式

    這篇文章主要介紹了基于@ComponentScan注解及其XML配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Java中Set&List的迭代器實(shí)現(xiàn)步驟解析

    Java中Set&List的迭代器實(shí)現(xiàn)步驟解析

    這篇文章主要介紹了Java中Set&List的迭代器實(shí)現(xiàn)步驟解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • IDEA新建bootstrap.yml文件不顯示葉子圖標(biāo)的問(wèn)題

    IDEA新建bootstrap.yml文件不顯示葉子圖標(biāo)的問(wèn)題

    這篇文章主要介紹了IDEA新建bootstrap.yml文件不顯示葉子圖標(biāo)的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java基礎(chǔ)知識(shí)總結(jié)之繼承

    Java基礎(chǔ)知識(shí)總結(jié)之繼承

    這一篇我們來(lái)學(xué)習(xí)面向?qū)ο蟮牡诙€(gè)特征——繼承,文中有非常詳細(xì)的基礎(chǔ)知識(shí)總結(jié),對(duì)正在學(xué)習(xí)java的小伙伴們很有幫助,需要的朋友可以參考下
    2021-06-06
  • springboot接收日期字符串參數(shù)與返回日期字符串類(lèi)型格式化

    springboot接收日期字符串參數(shù)與返回日期字符串類(lèi)型格式化

    這篇文章主要介紹了springboot接收日期字符串參數(shù)與返回日期字符串類(lèi)型格式化,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01

最新評(píng)論