day20
今天:依次学习数组拷贝方法实操、方法运行的内存原理、基础类型和引用类型的本质区别。数组拷贝练习需要自主封装拷贝方法,新建同等长度目标数组,依靠循环遍历,把原数组每一位元素依次赋值,区分数组拷贝和数组地址直接赋值二者差异。方法内存原理讲解栈内存的运行机制,每当程序调用一个方法,便会在栈中开辟独立栈帧,方法执行结束之后对应的栈帧直接销毁,局部变量随之失效。基础数据类型与引用类型是 Java 的核心分类,基础类型变量直接存放真实数值,存储位置处在栈内存;数组这类引用类型,栈内只保存对象的内存地址,实体对象存放在堆内存。我明白了方法传参时两类数据的传递区别,基础类型传递数值副本,引用类型传递堆对象的地址副本。弄懂内存结构之后,之前数组改动连带影响原数组的疑惑得以解开,也能够规范编写数组拷贝代码,避开直接赋值造成两个数组共用一处堆空间的低级失误。
去了趟姥姥家,学了道新菜。
还是没有完全参透试题的正确写法,学习的还不达标。
问题与解决方案:我实操的时候碰到三处棘手的问题。第一处做数组拷贝,贪图省事直接让新数组等于原数组,只是传递了地址,修改新数组元素原数组跟着变动。之后我记住不能直接赋值,每次拷贝先初始化长度一致的空数组,循环挨个搬运每一个元素,做到两个数组互相独立。第二处很难消化栈帧运行流程,不清楚为什么方法里面定义的局部变量,出了方法就无法访问。我之后画图拆解内存运行过程,牢记方法运行结束栈帧就被回收,局部变量跟着销毁,需要数据返回就得写上 return。第三处总是混淆两种参数传递,分不清什么时候修改会影响原始数据。我现在养成习惯,传参先分辨类型,基础类型只是复制一份数值,改动不会牵连原值;只要是数组对象,传递的就是地址,函数内部修改元素会改动堆内本体,需要独立副本就完整执行数组拷贝,多次实操之后慢慢理顺内存逻辑。
明天 :继续学习Java,观看天道最后两集。

浙公网安备 33010602011771号