数据类型[] 数组名 = {元素1,元素2,元素3...};//必须在一个语句中完成,不能分成两个语句写

例如,定义存储1,2,3,4,5整数的数组容器

int[] arr = {1,2,3,4,5};//正确

int[] arr;
arr = {1,2,3,4,5};//错误

3.2.2. 动态初始化

数组变量的初始化和数组元素的赋值操作分开进行,即为动态初始化。

动态初始化中,只确定了元素的个数(即数组的长度),而元素值此时只是默认值,还并未真正赋自己期望的值。真正期望的数据需要后续单独一个一个赋值。

格式:

数组存储的元素的数据类型[] 数组名字 = new 数组存储的元素的数据类型[长度];



数组存储的数据类型[] 数组名字;
数组名字 = new 数组存储的数据类型[长度];

[长度]:数组的长度,表示数组容器中可以最多存储多少个元素。

注意:数组有定长特性,长度一旦指定,不可更改。

举例1:正确写法

int[] arr = new int[5];

int[] arr;
arr = new int[5];

举例2:错误写法

int[] arr = new int[5]{1,2,3,4,5};//错误的,后面有{}指定元素列表,就不需要在[]中指定元素个数了。

3.3. 一维数组的使用3.3.1. 数组的长度

数组的元素总个数,即数组的长度。

每个数组都有一个属性length指明它的长度,例如:arr.length 指明数组arr的长度(即元素个数)

每个数组都具有长度,而且一旦初始化,其长度就是确定且是不可变的。

3.3.2. 数组元素的引用

每一个存储到数组的元素,都会自动的拥有一个编号,从0开始,这个自动编号称为数组索引(index)或下标,可以通过数组的索引/下标访问到数组中的元素。

Java中数组的下标从[0]开始,下标范围是[0, 数组的长度-1],即[0, 数组名.length-1]

数组元素下标可以是整型常量或整型表达式。如a[3] , b[i] , c[6 * i];

3.4. 一维数组的遍历

将数组中的每个元素分别获取出来,就是遍历。for循环与数组的遍历是绝配。

举例

public class ArrayTest {
    public static void main(String[] args) {
        int[] arr = new int[]{1,2,3,4,5};
        //打印数组的属性,输出结果是5
        System.out.println("数组的长度:" + arr.length);

        //遍历输出数组中的元素
        System.out.println("数组的元素有:");
        for(int i=0; i<arr.length; i++){
            System.out.println(arr[i]);
        }
    }
}

3.5. 数组元素的默认值

数组是引用类型,当我们使用动态初始化方式创建数组时,元素值只是默认值。

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

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

数组初始二维化什么意思_二维数组初始化_二维数组初始化

4. 一维数组内存分析4.1. Java虚拟机的内存划分

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

二维数组初始化_数组初始二维化什么意思_二维数组初始化

虚拟机栈:用于存储正在执行的每个Java方法的局部变量表等。局部变量表存放了编译期可知长度的各种基本数据类型、对象引用,方法执行完,自动释放。

堆内存:存储对象(包括数组对象),new来创建的,都存储在堆内存。

方法区:存储已被虚拟机加载的类信息、常量、(静态变量)、即时编译器编译后的代码等数据。

本地方法栈:当程序中调用了native的本地方法时,本地方法执行期间的内存区域。

程序计数器:程序计数器是CPU中的寄存器,它包含每一个线程下一条要执行的指令的地址。

4.2. 一维数组在内存中的存储4.2.1. 一个一维数组内存图

public static void main(String[] args) {  
    int[] arr = new int[3];  
    System.out.println(arr);//[I@4eec7777  
}

二维数组初始化_数组初始二维化什么意思_二维数组初始化

程序执行流程:

main方法进入方法栈执行(绿色部分);

创建数组,JVM在堆内存中开辟空间,存储数组(黄色部分);

数组在内存中有自己的内存地址,以十六进制数表示(比如:0x01AB);

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

JVM将数组的内存首地址赋值给引用类型变量arr;

变量arr保存的是数组内存中的地址,而不是一个具体的数值。

二维数组初始化_数组初始二维化什么意思_二维数组初始化

数组下标为什么是0开始?因为第一个元素距离数组首地址间隔0个单元格。

4.2.2. 两个一维数组内存图

两个数组独立

public static void main(String[] args) {
    int[] arr = new int[3];
    int[] arr2 = new int[2];
    System.out.println(arr);
    System.out.println(arr2);
}

二维数组初始化_二维数组初始化_数组初始二维化什么意思

4.2.3. 两个变量指向一个一维数组

public static void main(String[] args) {  
    // 定义数组,存储3个元素  
    int[] arr = new int[3];  
    //数组索引进行赋值  
    arr[0] = 1;  
    arr[1] = 2;  
    arr[2] = 3;  
    //输出3个索引上的元素值  
    System.out.println(arr[0]);  
    System.out.println(arr[1]);  
    System.out.println(arr[2]);  
    //定义数组变量arr2,将arr的地址赋值给arr2  
    int[] arr2 = arr;  
    arr2[1] = 6;  
    System.out.println(arr[1]);  
}

二维数组初始化_数组初始二维化什么意思_二维数组初始化

定义数组arr并赋值1、2、3;

int[ ] arr2 = arr,将arr的内存地址赋值给arr2,arr与arr2指向同一个内存地址,即arr与arr2指向同一个一维数组;

arr2[1] = 6,将arr2数组的第二个元素修改为6,输出arr的第二个元素也是6,说明arr与arr2指向的是同一个数组。

5. 二维数组

Java 语言里提供了支持多维数组的语法。

如果说可以把一维数组当成几何中的线性图形,那么二维数组就相当于是一个表格,像Excel中的表格、围棋棋盘一样。

对于二维数组的理解,可以看成是一维数组array1又作为另一个一维数组array2的元素而存在,例如上图,每一行都是一个一维数组,三行一维数组又组成了一个新的一维数组。


创业/副业必备:

本站已持续更新1W+创业副业顶尖课程,涵盖多个领域。

点击查看详情

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。