10JAVA数组详解

来源:互联网 发布:手机淘宝分类怎么设置 编辑:程序博客网 时间:2024/06/05 18:29
除了基本类型意外的其它所有类型,都属于引用类型。比如String、数组,以及其它一切的Java类的类型的变量。
引用类似的变量,本质是指针。存的就是被赋值对象的内存首地址。


引用类型和基本类型区别:
1.基本类型声明的时候,已经确定了内存的大小。比如int是32位的,就是占用4个字节。
   而引用类型在声明的时候,是不确定内存大小的。所有的引用类型在未赋值之前,都是null。
2.基本类型赋值的时候,在变量中保存的就是数据的值。比如给一个int类型的变量赋值,就是把一个整数值放到所申请的4个字节中。
3.引用类型的变量占的内存大小也是确定的——系统多少位,引用变量就占用多少位。
   而引用类型在赋值的时候,在变量中保存的是一个指针,指向数据的实际内存地址。
   有趣的是,引用类型变量本身占用内存确定,但是却无法确定变量指向的内存地址包含的空间有多大。


数组是一种数据类型。用于存储多个相同类型的数据。


所有已有的数据类型后面,加上一对方括号,就是数组类型。
如:
    int  →  int[]
    char  →  char[]
    long  →  long[]
    boolean  →  boolean[]
    String  →  String[]
    int[]  →  int[][]


 数组的创建方式:
 
 方式1:动态方式
     数组的申明 和 数组的创建  和 数组的赋值 ,不在同一行;
     int[]   i;  // 申明  了一个int数组 变量名称叫 i   
     i = new int[5]; // 数组的创建,表示创建了一个int类型的数组,并开辟了5个连续的内存空间。 
     i[0] =  1;//表示往 连续的5个内存空间的第一个位置赋值,数组的下标是从 0 开始
     i[1] = 2;    
     i[2] = 4;
     i[3] = 5;
     i[4] = 6;  // 数组的最大长度减 1
     int[] a = new int[10];
     

     方式2:静态方式
     数组的申明 和 数组的创建  和 数组的赋值 ,在同一行;
     int[] i  = {1,2,3,4,5};
     i[0] 获得数组的第一个元素

  不可能只开辟空间,而不赋值
  int[] i = new int[10];  // 系统赋值
  int[] i ={1,2,3,4,5};    //手动指定


数组的作用


用于存放大量数据
如果只有一个值,用变量来存即可。
如果有大量相同类型的变量,可以用数组来存。
创建一个数组后,相当于得到了N个类型相同的变量。
每个数组元素,相当于数组类型去掉一组方括号之后的类型的变量。可以像使用变量一样去使用数组元素。


java数组的特点
Java是一门静态语言,一个数组创建完成以后,数组所占的内存大小、内存位置都是不变的。
即:数组对象在初始化了以后,长度不能再改变。


如何获得数组的长度?

所有的数组都有一个属性length,获取数组的长度:

int[] i = new int[10];

System.out.println(i.length);//输出10


String[] s = new String[]{"234", "aggg"};
System.out.println(s.length);//输出2


如何获取数组的元素?


数组按照索引(下标)获取其中每个元素,索引从0开始。


int[] iArr = new int[10];
//数组元素的索引,从0开始计算
System.out.println(iArr[0]);//输出第一个元素
System.out.println(iArr[1]);//输出第二个元素


int[] sArr = new String[]{"234", "aggg"};
for(int i = 0; i < sArr.length; i ++){
    //可以直接使用固定的数字索引,也可以使用变量传递可变的索引。
    System.out.println(sArr[i]);
}
还有一种是for each方法


//int s 定义一个变量来接收int类型数组的每个元素 String类型数组的话就用String定义
for(int s : sArr){
   System.out.println(sArr[i]);
}


二维数据 就像 int[][]
它的历遍方法
1.变量第一维,把第一维数组的元素取出存到一个变量中,这个变量就是指向到第二维的数组的。
2.遍历变量就是在遍历第二维数组。


for (int i = 0; i < arr.length; i++){
//从第一维取出一个元素,赋值给一个变量
//因为arr的数据类型int[],所以也要赋值给int[]类型的变量
int[] arr1 = arr[i];
        //遍历第二维
for (int j = 0; j < arr1.length; j++){
System.out.print(arr1[j]);
}
System.out.println();
}




不正确使用数据时常会出现的异常


空指针异常


数组如果没有初始化,相当于是等于null
等于null的时候,不能使用该数组,因为使用的时候电脑不知道要从哪里取、哪里存???
于是报错:java.lang.NullPointerException




数组下标越界异常


数组的索引是从0开始计算,所以最大索引是"数组长度-1",最小索引0。
因此如果传递进去索引超出这个范围,就会数组越界:java.lang.ArrayIndexOutOfBoundsException