第三周学习知识小小结

文章讲述了作者在编程学习过程中对实践操作的重要性认识,强调通过实际敲代码、调试来加深理解,以及对Java栈帧结构的详细解释。同时,提到IDEA的代码提示工具对提高效率的影响,但也提醒过度依赖可能导致基础知识记忆变浅,提倡自我构建方法库以巩固基础。
摘要由CSDN通过智能技术生成

一、没啥用的反思

日子看起来啊一天天的,从早至晚是慢的长的久的,其实快的。转眼新学期开始已经有了3周,要说学习也学了一些了,不过自觉对很多东西还是半知半解的,光对于专业课来说是这样的。

学编程,敲代码,就着重落在一个“敲”字上头。敲得少了,还是生疏难免,毕竟对手上的东西还是没有真实的感触体会,这样的话,看再多知识点、例题什么的,终究是不如一个符号一个字母敲来得实在、印象深。更不用提熟能生巧、触类旁通这些都懂得的道理。

自己敲,出错误,自己调试,自己查资料,哪个知识点遗漏啦、哪个地方又忘记加分号、哪个变量类型和结果又不匹配了、哪个算法还没掌握......这就像自己亲手一把屎一把尿培育自己的孩子,过程艰辛又漫长,真得是自己汗流浃背,焦头烂额,才能晓得“纸上得来终觉浅”吧,我当然也没做好,不过时常脸也不红地督促自己接下来还是要“躬行”。

二、Java学习中对栈帧的理解

栈的本质是内存,一个装东西的箱子。至于装的东西,就是栈帧。

栈帧的结构如下:

(1)局部变量表(存放当前方法所对应的局部变量)

(2)操作数栈(或表达式栈)

(3)返回地址(方法正常或异常退出的定义)

(4)动态链接(指向运行时常量池的方法引用)

以一段简单的代码为例说明对栈的运行的理解

    public static int add(int a, int b) {
        int c = a + b;
        return c;
    }
 
    public static void main(String[] args) {
        int a = 1, b = 2;
        int res = add(a, b);
        System.out.println(res);
    }

如图,程序从进入main方法开始,此时便建立了一个“栈箱子”。紧接又出现了一个main方法的“”栈帧小盒子”,它首先进入栈中,平整地压在“栈箱子底部”。“栈帧盒子”表面贴着一张局部变量表,盒子里面划分了许多小格子,这就是用来装那繁多的小物什(变量)的slot(插槽)了。局部变量表根据每个物什的大小规划了不同大小与数量的插槽来存放。例如此处String占2个slot,变量a,b,res各占一个slot。

之后,add方法也构建栈帧入栈位于栈首,同样有局部变量表为其变量规划slot。

    static int add (int a, int b)
    {
        int c = a + b ;
        /*a,b,c各占一个slot,通过操作数栈,main栈帧将a,b值赋予add栈帧。*/
        return c ;
        /*add栈帧完成运算后返回c值,通过操作数栈还给main栈帧变量res。此处为使直观而造成冗余,可以直接返回 a+b。*/
    }

于是,main方法栈帧中的变量值通过操作数栈传递给add栈帧,再经过运算,add栈帧返回一个值给main栈帧中的res变量。凭借返回地址,在离开了add方法后程序继续从下一行开始执行。于是与上面的过程类似,执行println方法进行输出,最后栈中的栈帧根据先进后出的规律(First In Last Out),一个个出栈(被抹掉),直到main方法栈帧出栈,程序结束。以上就是我当前对栈的知识的理解,借助下面潦草的图画理解更形象。

三、其它

当我进入IDEA写代码时,只要稍微开个头,后面就会跳出各种方法的代码提示,然后轻轻点击,就能轻松写出各种方法,而不会担心自己忘记或者写错。我觉得这确实非常便捷,极大提升了写代码的效率吧。不过老师也说、我也想到——这样写代码印象还是浅了,用它的时候可能一下子敲十几行,说不定离了它又会无从下手了,所以还是要多在Markdown、Editplus之类的地方写,或者干脆在电脑的文本文档里写也行。

当然了,于此同时也感慨前人的努力与周到。打开IEDA里的外部库,里面的方法数不胜数,都已经为我们提前准备好了,这才能使我们后来人写代码如此方便。我于是也想着建个自己的方法库,之后写代码,不管是普通的运算,还是一些数学公式和数字(譬如自守数、水仙花数),甚至各种算法(如二分法)什么的,只要从我自己的方法库调用一下,就能轻松完成。而构建方法库的同时也能巩固基础,加强记忆,以后再翻出来看也有点意思(不过大概最主要还是保证代码量罢,老师有要求)。哈哈。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值