关于static与堆栈的简单理解

Static:静态

想起了一个问题,一直都说,Java中静态的方法不能调用非静态的变量,但是不知道为什么,偶尔还是会混淆


查了一下,比较合理的解释是:

静态的一般都是在程序一开始执行的时候就加载或者执行的。那么静态方法在程序一开始就加载了。

那么静态的变量肯定也是一开始就加载了,静态的方法调用它的时候,自然能够找到它。

但是非静态的变量是在后来才加载的,那么静态的方法调用它的时候,它还不存在。


因此:Java中静态的方法不能调用非静态的变量


堆和栈:


百度百科的介绍:

堆和栈用于暂时存放数据和地址

堆和栈有不同的数据结构:

堆:列队结构,先进先出

栈:先进后出


栈空间:编译器自动分配,释放。存放函数的参数值,局部变量等

堆空间:一般由程序员分配释放,程序员不释放,程序结束时,由系统释放


在java中,我们常听到的是,堆中存放对象,栈中存放变量。但是java没有提供手动回收垃圾的方法,只有通知系统回收垃圾或者等待系统自动回收。

相对于java,c中是可以通过请求分配空间和free()手动释放空间的。


看了别人的记录:

很多人说static是在方法区中的

所谓方法区,请看百科上的JVM结构图:

class文件,下面从左到右依次是:

方法区,堆,栈,PC寄存器,本地方法栈。

知道方法区不属于堆,也不属于栈。


关于具体的内容。还没研究过JVM

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值