数组/JVM内存图/方法

前言

提示:这里只有冰冷的知识点,和博主冰冷又绝望的每日感言


一、数组

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艹,随便刷刷题就行了。累了,歇了

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值