day04 数组
**容器:**是将多个数据存储到一起,每个数据称为该容器的元素。
1.1数组
**数组的概念:**数组就是存储数据长度固定的容器。保证多个数据的数据类型要一致。
1.2数组的定义
1.2.1动态的定义方式:
定义格式:
数据类型[] 数组名 = new 数据类型[数组的长度]
-
数组定义格式刷的详解
-
数组存储的数据类型:创建数组容器可以存储什么类型的数据。
-
[ ]表示数组。
-
数组名字:为定义的数组起个变量名,满足标识符规范,可以使用名字操作数组。
-
new关键字:创建数组使用的关键字,在内存中开辟一块空间。
-
数据类型:和前边的数据类型保持一致。
-
[长度]:数组的长度,表示数组容器中可以存储多少个元素。
-
**注意:**数组有定长的特性,长度一旦被指定,不可以被改变。
-
举例:
int[] arr = new int[3]
1.2.2静态定义数组的方式:
基本格式:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3};
举例:
int[] arr = new int[]{11,22,33};
简化格式:
数据类型[] 数组名 = {元素1,元素2,元素3};
举例:
int [] arr ={11,22,33};
1.3数组的访问:
-
**索引:**每一个存储到数组的元素,都会自动的拥有一个编号,且从0开始,这个自定编号称为
数组索引
,可以通过数组的索引访问到数组中元素。 -
格式:
数组名[索引];
- **数组长度的属性:**每个数组都具有长度,而且是固定的,java中赋予了数组的一个属性,可以获取到数组的长度,语句为:
数组名.lenght
,属性length的执行结果是数组的长度,int类型结果。因此,数组的最大索引值为length-1
。
public static void main(String[] args){
int[] arr = new int[]{11,22,33,44,55};
System.out.println(arr.length);//输出的结果为5
}
- 索引访问数组中的元素:
- 数组名[索引]=数值,为数组中的元素赋值。
- 变量 =数组名[索引],获取出数组中的元素
2.数组原理内存图(重点)
2.1内存概述
内存是计算机中的重要原件,零时存储区域,作用是运行程序。我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运作的,必须放进内存中才能运作,运作完毕后会清空内存。
2.2java虚拟机的内存划分
JVM的内存划分:
寄存器:给CPU使用,和我们的开发无关。
本地方法栈:JVM在使用操作系统功能的时候使用,和开发无关。
方法区:存储可以运行的class文件。
堆内存:存储对象或者数组,new来创建的,都存储在堆内存中。
方法栈(栈):方法运行时使用的内存,比如main方法运行时,进入方法栈中执行。
2.3数组在内存中的存储
public ststic void main(Stinr[] args){
int[] arr = new int[3]{11,22,33};
System.out.println(arr);//打印出来的数组在内存中地址
}
解析:以上方法执行,输出的结果是[I@5f150435,这个是数组在内存中的地址。new出来的内容,都是在堆内存中存储的,而方法中变量的arr保存的是数组的地址。
图解:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9PMngPBN-1610628035954)(C:\Users\Acer\AppData\Roaming\Typora\typora-user-images\1610605944125.png)]
public static void main(String[] args){
int[] arr = new int[3];
int[] arr2 = new int [2];
System.out.println(arr);
System.out.println(arr);
}
动态定义数组的内存图解:
public class ArrayDemo01{
public class void main(String[] args){
int[] arr = new int[3];
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
arr[0] = 100;
arr[2] = 300;
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[2]);
System.out.println(arr[3]);
}
}
图解:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n1oINZDW-1610628035956)(C:\Users\Acer\AppData\Roaming\Typora\typora-user-images\1610606218781.png)]
静态初始化数组的内存图解:
public class ArrayDemo02{
public static void main(String[] args){
int[] arr = {11,22,33};
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
}
}
图解:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jTwBMSVe-1610628035957)(C:\Users\Acer\AppData\Roaming\Typora\typora-user-images\1610606947848.png)]
两个数组指向同一个内存地址值的内存图:
public class ArrayDemo03{
public static void main(String[] args){
int[] arr01 = new int[3];
System.out.println(arr01);
System.out.println(arr01[0]);
System.out.println(arr01[1]);
System.out.println(arr01[2]);
int[] arr02 = arr01;
System.out.println(arr02);
System.out.println(arr02[0]);
System.out.println(arr02[1]);
System.out.println(arr02[2]);
arr02[0] = 100;
arr02[2] = 300;
System.out.println(arr02);
System.out.println(arr02[0]);
System.out.println(arr02[1]);
System.out.println(arr02[2]);
System.out.println(arr01);
System.out.println(arr01[0]);
System.out.println(arr01[1]);
System.out.println(arr01[2]);
}
}
图解:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IodoU5gL-1610628035960)(C:\Users\Acer\AppData\Roaming\Typora\typora-user-images\1610607281881.png)]
数组不可改变行的内存图:
public class ArrayDemo04{
public static void main(String[] args){
int[] arr = new int[3];
arr = new int[5];
}
}
图解:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VMwS1OB0-1610628035961)(C:\Users\Acer\AppData\Roaming\Typora\typora-user-images\1610607567762.png)]
1610628035960)]
数组不可改变行的内存图:
public class ArrayDemo04{
public static void main(String[] args){
int[] arr = new int[3];
arr = new int[5];
}
}
图解:
[外链图片转存中…(img-VMwS1OB0-1610628035961)]