Java数组的介绍与数组空间的分析

Java数组的介绍

      1.数组的定义与初始化

                数组是储存同一类型多个元素的固定容器,数组拥有下面几种特点:

                1.数组里面的元素的数据类型一致的。

                2.数组里的元素个数需要有多个(含有一个或零个的元素的数组可以创建但没有意义)。

                 3.以声明的数组长度是固定的不变的。

        数组的定义(声明):
        数据类型[] 数据名
        数据类型 数据名[]
 
        数据类型;数组的数据类型
        []:定义的是数组
        数组名:给数组起的名称

                 数组的初始化方式:

         1.动态初始化(在初始化时,只初始化数组的长度,不具体初始化数组的数据)

int b[]=new int [5];

        2.静态初始化:在初始化数据时,不直接初始化数据的长度,初始化数据的具体元素, jvm会通过数组中具体元素个数分配空间

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

                   在数组的初始化时Java不允许通过动静结合的方式初始化数组

        2.数组元素的访问与修改

                  以我们上述定义的数组a[]为例子

System.out.println(a);//得到人工模拟的内存地址
System.out.println(a[0]);//访问数组的元素
a[1]=5;//修改a[1]中的元素
System.out.println(a[1]);
System.out.println(a.length);//动态获取数组的长度 数组名.length (会返回一个length值)

         3.数组的空间分配

           在数组的初始化时,JVM会在系统的栈存储空间中分配空间给初始化的数组,分配空间 的大小与初始化时定义的数组长度有关。在一开始初始化空间时,无论时静态初始化还是动态初始化,其分配栈空间的默认值都是相同的,int类型是0,String类型是null等。但静态初始化在之后会自动将栈空间的值进行改变。

          以为数组指向的是栈空间,说一会出现如下一种情况:


        int [] c;
        c=a;
        for(int i=0;i<c.length;i++){
            System.out.println(c[i]);
        }

        我们会发现输出出来的元素值与数组a[]的元素值一摸一样,这是应为我们让数组c[]的栈空间指向与a一样,我们测试如下代码会发现,c[]与a[]的内存地址是相同的,这也证明了此 时他们指向相同的栈空间。

        System.out.println(c);
        System.out.println(a);

          以为数组的空间是被分配好的栈空间,所以我们在使用数组时会出现 数组索引越界异常的的操作。其原理时我们访问的索引超出了分配的空间。以上述的数组a[]为例,数组a的 长度为5,但我们却想去访问a[5](数组空间索引从0算起),这就会导致程序运行错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值