Java 之 一维数组

一、声明与初始化一维数组

  1、声明(两种方式)

数组元素类型 数组名称[];
数组元素类型[] 数组名字;

     数组元素类型:决定了数组的数据类型,即数组要存放什么类型的数据,可以是基本数据类型和引用数据类型;

     Java语言中声明数组时不能指定其长度(数组中元素的数), 例如: int a[5]; //非法
    Demo:

int a[];
int[] a1;
double b[];
String[] c; //引用类型变量数组

  

  2、初始化(两种方式)

     数组的初始化:在内存当中创建一个数组,并且向其中赋予一些默认值,再用 new 运算符进行内存分配。

     两种初始化方式:

    (1)动态初始化(指定长度):数组声明且为数组元素分配空间与赋值的操作分开进行

数组名称 = new 数据类型[数组长度];

       数据类型:也就是数组当中保存的数据,全都是统一的什么类型,与声明时要一致;

       数组长度:也就是数组当中,到底可以保存多少个数据,是一个int数字;

       注意:数组有定长特性,数组一旦初始化完成,其长度就确定了,不可更改。

    (2)静态初始化(指定内容):在定义数组的同时就为数组元素分配空间并赋值。

数组名称 = new 数据类型[]{元素1,元素2,……};

      注意:虽然静态初始化没有直接告诉长度,但是根据大括号里面的元素具体内容,也可以自动推算出来长度。

      Demo:

    int[] ids;//声明
    //1.1 静态初始化:数组的初始化和数组元素的赋值操作同时进行
    ids = new int[]{1001,1002,1003,1004};
    //1.2动态初始化:数组的初始化和数组元素的赋值操作分开进行
    String[] names = new String[5];

  

  3、声明并初始化数组

    声明的同时使用 new 关键字为数组分配内存空间:

数据类型 数组名字 = new 数组元素的类型[数组元素的个数]
数据类型 数组名字 = new 数组元素的类型[元素1,元素2,……]

    注意使用 new 关键字分配数组时,必须指定数组元素的类型数组元素的个数数组元素

  4、省略new的方式(类型推断)

数据类型[] 数组名称 = { 元素1, 元素2, ... };

    使用这种方式,会根据元素类型推断中所创建的数组中的数据类型,此时声明和初始化必须在同一行!

  Demo:

int[] arr = {1,2,3,4,5};//类型推断

int[] arr2;
arr2 = {1,2,3,4,5};  //编译不通过,这样必须写在同一行

  

二、一维数组的访问与数组长度

  1、打印数组名称

    当使用 System.out.println 打印数组的名称时,得到的数组对应的:数组对象的类型@内存地址哈希值。(十六进制的地址值)

    Demo:

int[] arr2 = new int[3];
System.out.println(arr2);     //结果是:[I@6d06d69c

  2、数组的长度

    每个数组都具有长度,而且是固定的,Java中赋予了数组的一个属性,可以获取到数组的 长度,语句为: 数组名.length ,属性length的执行结果是数组的长度,int类型结果。

    由次可以推断出,数组 的最大索引值为 数组名.length-1 。

    注意:数组一旦初始化,其长度是不可变的。

  3、访问数组中的元素

    定义并用运算符new为之分配空间后,才可以引用数组中的每个元素
    索引(下标):每一个存储到数组的元素,都会自动的拥有一个编号,从0开始,这个自动编号称为数组索引 (index),可以通过数组的索引访问到数组中的元素;

      数组元素下标可以是整型常量或整型表达式。如a[3] , b[i] , c[6*i];
      数组元素下标从0开始;长度为n的数组合法下标取值范围: 0 —>n-1int a[]=new int[3]; 可引用的数组元素为a[0]a[1]a[2]
    格式:

数组名[索引] = 数值,     //为数组中的元素赋值
变量 = 数组名[索引]       //获取出数组中的元素

三、遍历数组

  数组遍历就是将数组中的每个元素分别获取出来,就是遍历。遍历也是数组操作中的基石。  

  方式一:使用索引下标方式

1 int[] array = { 15, 25, 30, 40, 50, 60, 75 };
2 System.out.println(array[0]); // 15
3 System.out.println(array[1]); // 25
4 System.out.println(array[2]); // 30
5 System.out.println(array[3]); // 40
6 System.out.println(array[4]); // 50
7 System.out.println(array[5]); // 50

    这种方式需要依次根据索引进行频繁重复的操作,不推荐使用,只做了解。

  方式二:使用for

int[] arr = new int[5];
for(int i = 0;i < arr.length;i++){
    System.out.println(arr[i]);
}

    对于一个数组,每次对每个元素的操作都是相同的,用循环是最好的方法。而且就算数组的长度发送了改变代码也不需要改动。

  方式三:使用 foreach 循环

1 for (int i: array){
2      System.out.println(array[i]);
3 }

     这种循环是增强形式的 for 循环,其中 i 即代表数组中的每一个元素。

 

四、数组元素的默认初始化值

    数组是引用类型,它的元素相当于类的成员变量,因此数组一经分配空间,其中的每个元素也被按照成员变量同样的方式被隐式
初始化。

    对于基本数据类型而言,默认初始化值各有不同;

    对于引用数据类型而言,默认初始化值为null(注意与0不同!)
    

     整数类型:默认是 0;

    浮点类型:默认是 0.0;

    字符类型:默认为 'u0000',字符编码为0的空字符;

    布尔类型:默认是 false;

    引用类型:默认是 null。

     注意:静态初始化其实也有默认值的过程,只不过系统自动马上将默认值替换成为了大括号当中的具体数值。

五、一维数组的内存解析

  1、内存概述

    内存是计算机中的重要原件,临时存储区域,作用是运行程序。我们编写的程序是存放在硬盘中的,在硬盘中的程 序是不会运行的,必须放进内存中才能运行,运行完毕后会清空内存。

    Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。

  2、Java 虚拟机的内存划分

    为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。

    JVM 的内存划分:

    

                      

  3、数组在内存中的存储

    (1) 一个数组与内存关系

    

   程序执行流程:

    a、main 方法进入方法栈执行;

    b、创建数组,JVM会在堆内存中开辟空间,存储数组;

      c、数组在内存中会有自己的内存地址,以十六进制数表示;

    d、数组中有3个元素,默认值为 0

    e、JVM 将数组的内存地址赋值给引用变量 array;

    f、变量 array 保存的是数组内存中的地址,而不是一个具体是数值,因此称为 引用数据类型;

  (2)两个数组与内存关系 

    

  (3)两个变量指向一个数组

    

  4、数组内存图

    (1)声明数组类型

      

    (2)数组的默认值

      

    (3)数组的动态初始化

      

  5、数组内存案例

    (1)案例一

      

    (2)案例二

      

    (3)案例三

      

原文地址:https://www.cnblogs.com/niujifei/p/13621739.html