⭐前言⭐
※※※大家好!我是同学〖森〗,一名计算机爱好者,今天让我们进入学习模式。若有错误,请多多指教。
👍 点赞 ⭐ 收藏 📝留言 都是我创作的最大的动力!
⭐思维导图⭐
⭐目录⭐
※※※大家好!我是同学〖森〗,一名计算机爱好者,今天让我们进入学习模式。若有错误,请多多指教。
1、数组的创建和初始化
1.1数组的创建
A[] 数组名 = new A [大小];
//A表示数据类型。
//第一个[]内不能有数字,A[]表示的是数组类型。
1.2数组的初始化
int[] array1 = new int[5]; //默认为0
int[] array2 = new int[]{1,2,3,4,5};
int[] array3 = {1,2,3,4,5};
动态初始化 or 静态初始化
动态初始化:在创建数组时,直接指定数组中元素的个数。
静态初始化:在创建数组时不直接指定数据元素个数,而直接将具体的数据内容进行指定
简记: [ ]里有数字的就是动态初始化。
初始化可分两步完成:
int[] array;
array = new int[5];
int[] array1;
array1 = new int[]{1,2,3,4,5};
//注:int[] array2 = {1,2,3,4,5}; 这种格式不能两步完成。
基本类型默认值表
类型 | 默认值 |
---|---|
byte | 0 |
short | 0 |
int | 0 |
long | 0 |
float | 0.0f |
double | 0.0 |
char | /u0000 |
boolean | false |
数组越界错误
抛出了 java.lang.ArrayIndexOutOfBoundsException . 表示你的数组越界,编译器报错了。
2、遍历数组
如:打印array数组
int[] array = new int[]{1,2,3,4,5};
//方法1
System.out.println("方法一:");
for (int i = 0; i < 5; i++) {
System.out.print(array[i]+" ");
}
System.out.println();
//5可以用array.length代替
//数组名.length表示数组的长度
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]+" ");
}
//方法二
System.out.println("\n方法二:");
//foreach循环。
for (int x:array) {
System.out.print(x+" ");
}
//方法三
System.out.println("\n方法三:");
// 让数组变成字符串
System.out.println(Arrays.toString(array));
输出:
1、 foreach比较简洁,如果循环使用到全部元素并且不需要使用下标时可以选择foreach循环
2、打印数组常用方法三(注:使用Arrays要引包 import java.util.Arrays;相当于c语言的头文件)
3、数组
3.1初始jvm内存分布
程序计数器 (PC Register): 只是一个很小的空间 , 保存下一条执行的指令的地址虚拟机栈 (JVM Stack): 与方法调用相关的一些信息, 每个方法在执行时,都会先创建一个栈帧 ,栈帧中包含 有:局部变量表 、 操作数栈 、 动态链接 、 返回地址 以及其他的一些信息,保存的都是与方法执行时相关的一 些信息。比如:局部变量。当方法运行结束后,栈帧就被销毁了,即栈帧中保存的数据也被销毁了 。本地方法栈 (Native Method Stack): 本地方法栈与虚拟机栈的作用类似 . 只不过 保存的内容是 Native 方法的局 部变量 . 在有些版本的 JVM 实现中 ( 例如 HotSpot), 本地方法栈和虚拟机栈是一起的堆 (Heap) : JVM 所管理的最大内存区域 . 使用 new 创建的对象都是在堆上保存( 例如前面的 new int[]{1, 2, 3} ) ,堆是随着程序开始运行时而创建,随着程序的退出而销毁,堆中的数据只要还有在使用,就不会被销 毁 。方法区 (Method Area) : 用于 存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数 据 . 方法编译出的的字节码就是保存在这个区域
3.2数组是引用类型
即:在栈区array内只不过是存放的在堆区创建数组的地址,通过该地址引用变量来访问数组内容。
int[] array = null;
//表示空引用,即不指向任何对象。
数组的功能
1、保存数据
2、作为函数的参数
3、作为函数的返回值。
3.3数组拷贝
int[]array = {1,2,3,4,5};
int[] copy = Arrays.copyOf(array,array.length);
System.out.println(Arrays.toString(array));
System.out.println("=================");
System.out.println(Arrays.toString(copy));
输出
copyOf出来的数组和原数组没有关系,即修改array中的数据copy中的数据不变。
copyOf第一个参数是被拷贝的数组名,第二个参数是要拷贝长度
返回值是新建数组的地址,用一个数组接收。
copyOf还可以给数组扩容
int[]array = {1,2,3,4,5};
array = Arrays.copyOf(array,array.length*2);
System.out.println(Arrays.toString(array));
输出