Static:静态
想起了一个问题,一直都说,Java中静态的方法不能调用非静态的变量,但是不知道为什么,偶尔还是会混淆
查了一下,比较合理的解释是:
静态的一般都是在程序一开始执行的时候就加载或者执行的。那么静态方法在程序一开始就加载了。
那么静态的变量肯定也是一开始就加载了,静态的方法调用它的时候,自然能够找到它。
但是非静态的变量是在后来才加载的,那么静态的方法调用它的时候,它还不存在。
因此:Java中静态的方法不能调用非静态的变量
堆和栈:
百度百科的介绍:
堆和栈用于暂时存放数据和地址
堆和栈有不同的数据结构:
堆:列队结构,先进先出
栈:先进后出
栈空间:编译器自动分配,释放。存放函数的参数值,局部变量等
堆空间:一般由程序员分配释放,程序员不释放,程序结束时,由系统释放
在java中,我们常听到的是,堆中存放对象,栈中存放变量。但是java没有提供手动回收垃圾的方法,只有通知系统回收垃圾或者等待系统自动回收。
相对于java,c中是可以通过请求分配空间和free()手动释放空间的。
看了别人的记录:
很多人说static是在方法区中的
所谓方法区,请看百科上的JVM结构图:
class文件,下面从左到右依次是:
方法区,堆,栈,PC寄存器,本地方法栈。
知道方法区不属于堆,也不属于栈。
关于具体的内容。还没研究过JVM