007-Java数组

目录

容器

数组

数组的定义及初始化

数组的访问

数组原理内存图

JVM的内存划分

数组在内存中的存储

使用数组应注意的问题

数组作为方法参数和返回值

感谢关注


容器

是将多个数据存储到一起,每个数据称为该容器的元素。

数组

数组就是存储数据长度固定的容器,保证多个数据的数据类型要一致,可以同时存放多个数据。

特点

1. 数组是一种引用数据类型。
2. 数组当中的多个数据,类型必须统一。
3. 数组的长度在程序运行期间不可改变

 

数组的定义及初始化

方式1:
数组存储的数据类型[] 数组名字 = new 数组存储的数据类型[长度];
int[] arr = new int[3];

方式2:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...};
int[] arr = new int[]{1,2,3,4,5};

方式3:
数据类型[] 数组名 = {元素1,元素2,元素3...};
int[] arr = {1,2,3,4,5};

解释

左侧数据类型:也就是数组当中保存的数据,全都是统一的什么类型
左侧的中括号:代表我是一个数组
左侧数组名称:给数组取一个名字
右侧的new:代表创建数组的动作
右侧数据类型:必须和左边的数据类型保持一致
右侧中括号的长度:也就是数组当中,到底可以保存多少个数据,是一个int数字

动态初始化(指定长度):在创建数组的时候,直接指定数组当中的数据元素个数。
静态初始化(指定内容):在创建数组的时候,不直接指定数据个数多少,而是直接将具体的数据内容进行指定。

虽然静态初始化没有直接告诉长度,但是根据大括号里面的元素具体内容,也可以自动推算出来长度。使用建议:如果不确定数组当中的具体内容,用动态初始化;否则,已经确定了具体的内容,用静态初始化。

方式1为动态初始化,方式2,3  为静态初始化。

使用动态初始化数组的时候,其中的元素将会自动拥有一个默认值。规则如下:
如果是整数类型,那么默认为0;
如果是浮点类型,那么默认为0.0;
如果是字符类型,那么默认为'\u0000';
如果是布尔类型,那么默认为false;
如果是引用类型,那么默认为null。

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

 

数组的访问

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

数组的长度属性: 每个数组都具有长度,而且是固定的,Java中赋予了数组一个属性,可以获取到数组的长度,语句为: 数组名.length属性length的执行结果是数组的长度,int类型结果。由次可以推断出,数组的最大索引值为 数组名.length-1
 

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

一个demo介绍数组用法:   (数组反转)

 public static void main(String[] args) {
        int[] array = { 10, 20, 30, 40, 50 };

        // 遍历打印数组本来的样子
        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        }
        System.out.println("============");

        /*
        初始化语句:int min = 0, max = array.length - 1
        条件判断:min < max
        步进表达式:min++, max--
        循环体:用第三个变量倒手
         */
        for (int min = 0, max = array.length - 1; min < max; min++, max--) {
            int temp = array[min];
            array[min] = array[max];
            array[max] = temp;
        }

        // 再次打印遍历输出数组后来的样子
        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        }
    }

 

数组原理内存图

JVM的内存划分

区域名称作用
寄存器(pc Register)给CPU使用,和我们开发无关。
本地方法栈 (Native Method Stack)JVM在使用操作系统功能的时候使用,和我们开发无关。
方法区 ( Method Area)存储可以运行的class文件。
堆内存 (Heap)存储对象或者数组,new来创建的,都存储在堆内存。
方法栈 (Stack)

方法运行时使用的内存,比如main方法运行,进入方法栈中执行。
局部变量:方法的参数,或者是方法{}内部的变量。

局部变量的作用域:一旦超出作用域,就会立刻从栈内存中消失。


数组在内存中的存储

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

以上方法执行,输出的结果是[I@5f150435 ,是数组在内存中的地址。new出来的内容,都是在堆内存中存储的,而方法中的变量arr保存的是数组的地址。
 

一个数组的内存图

 

两个数组的内存图

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

 

使用数组应注意的问题

 

数组越界异常ArrayIndexOutOfBoundsException  ,使用数组时,索引超过了数组的长度

数组空指针异常NullPointerException ,数组没有初始化。

 

数组作为方法参数和返回值
 

数组作为方法参数传递,传递的参数是数组内存的地址。
数组作为方法的返回值,返回的是数组的内存地址

方法的参数为基本类型时,传递的是数据值. 方法的参数为引用类型时,传递的是地址值
 

感谢关注

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值