文章目录
前言
提示:这里只有冰冷的知识点,和博主冰冷又绝望的每日感言
一、数组
1.1数组初始化三种方式:
注意:数组有定长特性,长度一旦指定,不可更改
1.1.1静态初始化省略格式(不能拆分)
int []a={1,2,3,4};
静态初始化,再次赋值时,不能整体赋值
1.1.2静态初始化
int []a=new int[]{1,2,3,4};
静态初始化,再次赋值时可以整体赋值(new一个数组,可以再次new一个,把引用转向新的数组)
1.1.3动态初始化
int []a=new int[5];
动态初始化,不进行赋值,仅定义数组长度,可整体赋值。
@扩展方法: Arrays.fill快速初始化,填充一个数组
java中的数组初始值都为零,若快速填充一个其他值的数组,即将数组批量填充相同的值,可以用 Arrays.fill 方法,但只能填充一个一维数组,多维数组还得用循环。
int[] a = {1,2,3};
int[] b = new int[3];
b = a;
for(int i = 0; i < a.length; i++)
a[i] = 0;
1.2数组扩容的三种方式
① int[] arr2=new int[arr1.length*2] //新数组长度
for(int i=0;i<arr1.length;i++){
arr2[i]=arr1[i];
}
② int[] arr2=java.util.Arrays.copyOf(原数组名,新数组长度);
③ int[] arr2=new int[arr1.length*2]
System.arraycopy(原数组名,起始下标,新数组名,起始下标,复制长度)
1.2.1 例子:
1.3数组排序快捷方法
数组排序Arrays.sort(a);
1.4数组遍历
toString遍历方法
Arrays.toString(a);
foreach遍历方式
public static void main(String[] args) {
int[] arr = { 1, 2, 3, 4, 5 };
for (int i : arr) {
System.out.println(i);
}
}
1.5二维数组
二维数组是通过引用类型的一维数组实现的
输出结果
1.6数组作为方法传参和返回值
1.6.1数组作为方法参数传递
传递的参数是数组内存的地址
public static void main(String[] args) {
int[] arr = {1, 3, 5, 7, 9};
// 调⽤⽅法,传递数组
printArray(arr);
}
/*
* 创建⽅法,⽅法接收数组类型的参数
* 进⾏数组的遍历
*/
public static void printArray(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
1.6.2数组作为方法的返回值
返回的是数组的内存地址
public static void main(String[] args) {
// 调⽤⽅法,接收数组的返回值
// 接收到的是数组的内存地址
int[] arr = getArray();
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
/*
* 创建⽅法,返回值是数组类型
* return返回数组的地址
*/
public static int[] getArray() {
int[] arr = {1, 3, 5, 7, 9};
// 返回数组的地址,返回到调⽤者
return arr;
}
二、JVM内存图
1.JVM内存划分
1.方法区:类相关信息
2.栈:局部变量/临时变量
3.堆:引用类型的真正数据,对象
4.栈:主要存放局部变量(重点)
基本数据类型直接存在栈中(int a=0;),引用数据类型等号前面在栈里,等号后面在堆里(凡是new出来的东西都在堆里面)(int []a=new int)(数组是一个引用数据类型)
类加载:将字节码class文件中的类相关信息读取到JVM的方法区,在使用类前就加载到方法区中。
2.数组在内存中的存储
public static void main(String[] args) {
int[] arr = new int[3];
System.out.println(arr); // [I@5f150435
}
以上方法执行,输出的结果是[I@5f150435,这个是什么呢?是数组在内存中的地址。new出来的内容,都是在堆 内存中存储的,而方法中的变量arr保存的是数组的地址。
输出arr[0],就会输出arr保存的内存地址中数组中0索引上的元素
例子一:
程序执行流程:
1.main方法进入方法栈执行
2.创建数组,JVM会在堆内存中开辟空间,存储数组
3.数组在内存中会有自己的内存地址,以十六进制数表示
4.数组中有3个元素,默认值为0
5.JVM将数组的内存地址赋值给引用类型变量array
6.变量array保存的是数组内存中的地址,不是具体数值,因此称为引用数据类型。
例子二:
例子三:
三、转义字符
转义字符:
\t制表符
ln,\n,\r换行符
// --> 表示/本身
!!!! : nextLine()方法遇到回车就结束,最好放在控制台下第一行
带()的都是方法,比如str.length()是方法,a.length是属性
四、方法
4.1 定义⽅法的两个明确
1.需求:定义⽅法实现两个整数的求和计算。
2.明确返回值类型:⽅法计算的是整数的求和,结果也必然是个整数,返回值类型定义为
int类型。
3.明确参数列表:计算哪两个整数的和,并不清楚,但可以确定是整数,参数列表可以定义两个int类型的变量,由调⽤者调⽤⽅法时传递。
方法:存在方法栈之间,相互独立不互通,return后方法栈释放
4.2 形参与实参
形参:方法定义中的参数
实参:方法调用中的参数
4.3调用方法的三种形式
4.3.1直接调用
直接方法法名调用
4.3.2赋值调用
调用方法,在方法前面定义变量,接收方法返回值
4.3.3输出语句调用
总结
数组及JVM内存图及方法的需着重理解的知识点,数组的排序方式看另一篇(暂时懒得写),数组这东西要出难题也不会难到哪去,毕竟这是java不是C艹,随便刷刷题就行了。累了,歇了