传智播客-刘意-java深入浅出精华版学习笔记Day05

【视频的前半段讲的是方法。因为方法和函数几乎是一样的,所以直接跳过去了,从数组开始看,唯一有一点需要注意的,就是现在我们暂时都把方法定义为public static型的】

定义格式:

数组的初始化:

动态初始化:指定数组长度

int[] arr = new int[3]

解释:

int:数组元素类型

[]:说明这是一个数组

arr:是数组的名称,也是数组在内存空间中的的地址值

new:为数组分配内存空间

3:数组长度/数组中元素的个数

动态初始化:指定数组内元素的值

Java中的内存分配:

Java程序在运行时,为了提高运算效率,就对空间进行了不同区域的划分,每一片区域都有特定的处理数据方式和内存管理方式。栈、堆、方法区、本地方法区、寄存器。后两个我们管不了,今天考虑前两个。

栈:存放的是局部变量

堆:存放的是所有new出来的东西

【在方法定义中或方法声明上的变量都称为局部变量->那我们目前定义过的变量不就都是局部变量了?bingo】

对于栈来说,数据一旦脱离了作用域,就会被释放。

对于数组来说,栈内存中存放的是数组名的地址,这个地址指向堆内存中我们刚刚new出来的那个数组。

为了深入理解,考虑下面这样一个例子:

假如我定义了一个数组arr,又定义了一个数组arr3,令arr3=arr.此时如果我修改arr3的值,arr的值会不会改变呢?

答案是肯定的。

就像之前说的一样,arr的值是这个数组中的数值,在堆中的存储地址。当我把arr赋给arr3时,它们就指向了同一块堆中的地址。也就是说,它们是同一堆数据的两个不同的引用。

我喝这个杯子里的水,和你喝杯子里的水,是不同的人,但是喝的是同样的水!

 

静态初始化:指定数组内容(本质上是创建之后马上修改数值)

或简化格式:

(隐含的new)


注意:不要同时静态和动态初始化!

 

后面关于数组的几个test,时间关系我没有看视频,但是看了一下demo代码,有以下需要注意的问题:

1.    数组长度的获取:数组名.length

2.    我们说局部变量离开作用域就不可用了,但是在非主方法的方法中,对数组进行重写,这个值是可以保存下来的。为什么呢?因为即使是在方法中,我给数组元素赋值时,我其实是通过它找到了它引用的、在堆内存里的那个东西,并且改变了那个东西的值。在方法结束后,虽然局部变量不复存在了,但是堆内存里的东西确确实实被修改了。我们说局部变量对全局变量的修改可以通过指针来进行,也是这个意思。

3.    在方法中,一旦遇到return,立刻停止执行返回。所以下面两种表达是等价的。

猜你喜欢

转载自blog.csdn.net/weixin_39655021/article/details/79644802