java 一维数组 学习笔记

java 一维数组 学习笔记

1.数组的基础知识

数组是用来存储数据的集合,但是,通常我们会发现把数组看作一个存储具有相同类型的变量集合会更有用。无须声明单个变量,例如:number0, number1, number99, 只要声明一个数组变量numbers,并且用numbers[0], numbers[1],…, numbers[99]来表示单个变量。

2.数组变量

为了在程序中使用数组,必须声明一个引用数组的变量,并指明数组的元索类型。

变量与变量之间是独立存在的,他们之间是没有联系,变量的空间在内存中划分的时候,地址是随 机的。最终我们通过一个个变量名来访问该空间内的元素数据。

数组就相当于是一个有规则的容器,将所有的数据都存储在容器里,我们就可以方便统一操作这些 数据。

数组的本质是什么? 数组其实就是一堆变量的总称 !只不过 这些变量的地址是连续的 !那么地址既 然连续,今后在操作这些数据的时候,就会方便很多。

3.java中数组的特点

数组中的每一个变量空间的数据类型必须是一致的

数组一旦创建出来,其长度不可修改。但是其内容可以在兼容的情况下修改。

数组提供角标来访问元素。长度为n的数组,角标0~n-1

数组本身是一个对象!数组是在堆内存中创建的!在堆内存中创建的数据有一个特点, 就是 有默认初始化值,相对应的数据类型的零值

既然数组在堆内存中创建的,如何来访问数组呢?我们函数中的引用数据类型变量存储的是数 组在堆内存中首元素的地址。

数组有且只有一个属性 length 表示数组的长度

4.创建数组

不同于基本数据类型变量的声明,声明一个数组变量时并不在内存中给数组分配任何空间。它只是创建一个对数组的引用的存储位置。如果变量不包含对数组的引用,那么这个 变量的值为 null。除非数组已经被创建,否则不能给它分配任何元素。声明数组变量之后, 可以使用下面的语法用 new 操作符创建数组,并且将它的引用賦给一个变量:

数据类型[] 数组名 = new 数据类型[长度];
int[] arr = new int[10];//创建一个一维的int类型数组,长度为10,虽然没有指定元素,但是会有默认初始
化的值
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...,元素n};
int[] arr = new int[]{1,2,3,4,5,6};

5.数组的内存图解

int[] arr = new int[10];
//访问元素 数组名[index]
System.out.println(arr[0]); //arr取数组的地址 取出1000 套入公式计算空间地址 1000 +
(index)*4
System.out.println(arr[1]); //arr取数组的地址 取出1000 套入公式计算空间地址 1000 +
(index)*4
arr[5] = 10;
System.out.println(arr[0]);
System.out.println(arr[4]);
System.out.println(arr[5]);
//System.out.println(arr[10]);
/*
数组角标越界异常
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
at Sample.main(Sample.java:6)
*/
//区别于字符串长度 s.length() 字符串的长度是一个方法 数组的长度是一个属性
System.out.println("========================");
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");//[0,len-1]
}
System.out.println();
int[] arr2 = arr;
arr2[3] = 100;
System.out.println(arr[3]);
arr = null; //null是所有引用数据类型的零值!表示真没有 空 ∅
//System.out.println(arr[3]);
/*
空指针异常
Exception in thread "main" java.lang.NullPointerException
at Sample.main(Sample.java:31)
*/
arr2 = null;
//此时 再也没有变量指向(直到)数组 那么数组就成为了一个没人所知的数据
//而且 该数组在堆内存中是一直占据空间的 就会产生空间浪费的问题
//数组就成为垃圾 将来有JVM中 垃圾回收器GC 来自动清理即可!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值