java基础-数组

来源:互联网 发布:iphone随机抽奖软件 编辑:程序博客网 时间:2024/06/04 23:45

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------


Java 数组

数组是同一种类型数据的集合。其实数组就是一个容器。


Java语言中提供的数组是用来存储固定大小的同类型元素。


Java语言按数组的维数来分类,可以分为一维数组和多维数组。


1、一维数组

方式1(更能表明数组类型)

  type[] 变量名 = new type[数组中元素的个数];

  比如:

  int[] a = new int[10];

  数组名,也即引用a,指向数组元素的首地址。

  方式2

  type变量名[] = new type[数组中元素的个数];

  如:

  int a[] = new int[10];

  方式3 定义时直接初始化

  type[] 变量名 = new type[]{逗号分隔的初始化值};

  其中红色部分可省略,所以又有两种:

  int[] a = {1,2,3,4};

  int[] a = new int[]{1,2,3,4};

  其中int[] a = new int[]{1,2,3,4};的第二个方括号中不能加上数组长度,因为元素个数是由后面花括号的内容决定的。

实例

public class TestArray {   public static void main(String[] args) {      // 数组大小      int size = 10;      // 定义数组      double[] myList = new double[size];      myList[0] = 5.6;      myList[1] = 4.5;      myList[2] = 3.3;      myList[4] = 4.0;      myList[5] = 34.33;      myList[6] = 34.0;      myList[7] = 45.45;      myList[8] = 99.993;      myList[9] = 11123;      // 计算所有元素的总和      double total = 0;      for (int i = 0; i < size; i++) {         total += myList[i];      }      System.out.println("总和为: " + total);   }}

下面的图片描绘了数组myList。这里myList数组里有10个double元素,它的下标从0到9。

java数组结构说明

2、二维数组

二维数组是数组的数组。

二维数组基本的定义方式

1、数据类型[][] 数组名 = new 数据类型[m][n];


2、数据类型[][] 数组名 = new 数据类型[m][];


3、数据类型[][] 数组名 = new 数据类型[][]{{...},{...},{...}};


4、数据类型[][] 数组名 = {{...},{...},{...}};


public class ArrayTest3{      public static void main(String[] args)      {             int[][] i = new int[2][3];             System.out.println("Is i an Object? "                           + (i instanceof Object));             System.out.println("Is i[0] an int[]? "                           + (i[0] instanceof int[]));      }}

变长的二维数组

  二维数组的每个元素都是一个一维数组,这些数组不一定都是等长的。

声明二维数组的时候可以只指定第一维大小,空缺出第二维大小,之后再指定不同长度的数组。但是注意,第一维

大小不能空缺(不能只指定列数不指定行数)。

public class ArrayTest4{    public static void main(String[] args)    {        //二维变长数组        int[][] a = new int[3][];        a[0] = new int[2];        a[1] = new int[3];        a[2] = new int[1];        //Error: 不能空缺第一维大小        //int[][] b = new int[][3];    }}

  二维数组也可以在定义的时候初始化,使用花括号的嵌套完成,这时候不指定两个维数的大小,并且根据初始

化值的个数不同,可以生成不同长度的数组元素。

public class ArrayTest5{    public static void main(String[] args)    {        int[][] c = new int[][]{{1, 2, 3},{4},{5, 6, 7, 8}};        for(int i = 0; i < c.length; ++i)        {            for(int j = 0; j < c[i].length; ++j)            {                System.out.print(c[i][j]+" ");                    }            System.out.println();        }       }}

内存结构

Java程序在运行时,需要在内存中的分配空间。为了提高运算效率,有对空间进行了不同区域的划分,因为每一片

区域都有特定的处理数据方式和内存管理方式。

栈内存

用于存储局部变量,当数据使用完,所占空间会自动释放。

堆内存

数组和对象,通过new建立的实例都存放在堆内存中。

每一个实体都有内存地址值,实体中的变量都有默认初始化值,实体不在被使用,会在不确定的时间内被垃圾回收器

回收。

数组操作常见问题


数组脚标越界异常(ArrayIndexOutOfBoundsException)

int[] arr = new int[2];


System.out.println(arr[3]);

访问到了数组中的不存在的脚标时发生。

空指针异常(NullPointerException)

int[] arr = null;

System.out.println(arr[0]);

arr引用没有指向实体,却在操作实体中的元素时。







 
0 0
原创粉丝点击