是的我还在。。。。
2022年真的是我经历过的最牛逼的一年了,从年初开始到现在3个多月的时间,先后经历了2次疫情隔离,合计一个半月。作为一个自控力非常弱鸡的人,隔离在家对我来说简直就是噩梦。。。
真的是会懒,而且长期两地分居的我第二次隔离被隔离在了家中,居然过了一个月的已婚生活,每天徘徊在厨房做饭和躺着消遣两点一线之间,实在是提不起精神学习,这一点还是要自我抨击一下的,真弱!!梦想呢!!宏图壮志呢!!
不过还好,还是重新捡起来跟着学习了,700多课的视频课已经听了200多课了,现在立个flag,希望自己在今年年底之前能够顺利完成所有课程的学习(毕竟现在的工作真的是越干越觉得傻逼,搞不好7、8月份还要出去找工作,所以就到年底好了)
一、数组「Array」
1、概述:是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理
2、数组的常见概念
1、数组名
2、下标(或索引):索引的起始值是0
3、元素
4、数组的长度:存储的元素的个数
3、数组的特点:
1、数组是有序排列的
2、数组本身是引用数据类型,而数组中的元素既可以是基本数据类型,也可以是引用数据类型
3、创建数组的对象会在内存中开辟一整块连续的空间,而数组名中引用的是这块连续空间的首地址
4、数组的长度一旦确定就不可以修改。如果使用中发现已有的数组长度不够了,但是还要添加元素,只能新建数组
4、数组的分类:
1、按照维数分类:一维数组、二维数组、多维数组
2、按照数组元素的类型分类:基本数据类型元素的数组、引用数据类型元素的数组
二、一维数组的使用
1、一维数组的声明和初始化
1、静态初始化:数组的初始化和数组元素的赋值操作同时进行
2、动态初始化:数组的初始化和数组元素的赋值操作分开进行
3、总结:数组一旦初始化完成,其长度就确定了。
int ids[];//声明数组
//静态初始化
ids = new int[]{1001,1002,1003,1004};
//动态初始化
String[] names = new String[5];
//特殊的正确写法
int[] arr10 = {1,2,3}//类型推断
2、如何调用数组的指定位置的元素
1、通过角标(下标、索引)的方式调用
2、Java中数组的角标(下标、索引)是从0开始的,到数组的「长度-1」结束
Java中只要涉及到"索引"的,「基本上」都是从0开始,但是后续学习的数据库相关的内容,是从1开始的
names[0] = "周杰伦";
names[1] = "王力宏";
names[2] = "林俊杰";
names[3] = "蔡依林";
names[4] = "潘玮柏";
names[5] = "周润发";//编译是可以通过的,因为语法上是没有错误的,但是只有解释运行的时候才会加载到内存中,所以运行时候会报错,因为已经超过内存范围了
3、如何获取数组的长度
1、数组的属性:length
System.out.println(names.length);//5
System.out.println(ids.length);//4
4、如何遍历数组元素
for(int i = 0;i < names.length;i++){
System.out.println(names[i]);
}
5、数组元素的默认初始化值:
1、虽然数组还没有赋值,但是在创建数组的时候,为了在内存中开辟一块连续的空间,会填进去一些无意义的值来占据这个空间
2、不同类型的数组的默认初始化值
1、基本数据类型
1、数组元素是整型(short、byte、int、long):默认初始化值是0
2、数组元素是浮点型:默认初始化值是0.0
3、数组元素是char型:默认初始化值是「ASCII码是0或者是\u0000,而非数字0」,执行后表现出来效果是空格,但是其实不是空的
4、数组元素是布尔型:默认初始化值是false,因为false在二进制中是0
2、引用数据类型:数组元素是引用数据类型——默认初始化值是null,即空值
//数组元素是整型(short、byte、int、long):默认初始化值:0
short[] arr1 = new short[4];
for(int i = 0;i < arr1.length;i++){
System.out.println(arr1[i]);
}
//数据元素是浮点型:默认初始化值:0.0
float[] arr2 = new float[4];
for(int i = 0;i < arr1.length;i++){
System.out.println(arr2[i]);
}
//数组元素是char型:默认初始化值:ASCII码是0或者是\u0000,而非数字0,执行后表现效果为空格,但是其实不是空的
char[] arr3 = new char[4];
for(int i = 0;i < arr1.length;i++){
System.out.println("----" + arr3[i] + "****");
}
if(arr3[0] == 0){
System.out.println("你好");
}
//数组元素是boolean型:默认初始化值:false,因为false在二进制中是0
boolean[] arr4 = new boolean[4];
for(int i = 0;i < arr1.length;i++){
System.out.println(arr4[i]);
}
//数组元素是引用数据类型:默认初始化值是null,即空值。注意是null而不是"null"
String[] arr5 = new String[4];
System.out.println(arr5[0]);
if(arr5[0] == null){
System.out.println("今天天气不错");
}
6、 数组的内存解析:内存的简化结构⬇️
1、栈(stack):主要存放「局部变量(方法中定义的变量都是局部变量,比如main方法)」
2、堆(heap):主要存放new出来的结构
1、对象
2、数组
3、方法区(method area)
1、常量池,存放例如String
2、静态域,存放例如static
4、举例说明:
1、代码示例:仅为简单解析使用,其实实际执行过程还会有所偏差,先理解即可
int[] arr6 = new int[]{1,2,3;
String[] arr7 = new String[4];
arr7[1] = "刘德华";
arr7[2] = "张学友";
arr7 = new String[3];
2、解析过程:逐行代码进行分析
1、栈结构:声明arr6、声明arr7
2、堆结构:声明new int[]{1,2,3};、声明new String[4];