2012年10月18日 15:22供稿中心:兆隆教育
首先要知道java的成员变量分为:实例变量和类变量(也就是static变量)。
当JAVA程序执行时,类的字节码文件就被加载到内存,如果该类没有创建对象,类的实例成员变量不会被分配内存,但是类中的类变量在类被加载到内存的时候,就分配了相应的内存空间。如果该类创建对象,那么不同的实例变量互不相同,即分配不同的内存空间,而类变量不再重新分配,所有的对象共享类变量,即所有的对象的类变量是相同的一处内存空间,类变量的内空空间至于什么时候释放内存空间,这是大家想知道的,那么我告诉大家,类变量的内存空间直到程序退出运行,才会释放所占有的内存。
其实说到这里,我们应该再随便说下类的方法,类的方法也分实例方法和类方法,那么有谁能告诉我实例方法和类方法有什么区别么?
是这样的,类的实例方法是在只有类创建对象的时候才会被分配入口地址,而类方法,是当程序的字节码文件加载到内存就马上分配入口地址,这就是为什么实例方法可以调用类方法,而类方法不能调用实例方法的原因,也是类方法为什么不可以操作实例变量而实例方法可以操作类变量的原因(想想谁的入口地址先分配)。那么有人会问,当我在创建一个对象的时候,实例方法和类方法是不是会被再次分配入口地址???
其实不然,当你再创建一个对象时,实例方法是不会再分配入口地址的,也就是说,方法的入口地址是被所有对象共享的。类方法一开始就分配了入口地址,也不会再分配入口地址。讲到这里,也许有人还会问,那么方法的入口地址是什么时候才会被取消的呢?
是这样的,类方法是直到程序退出运行才会被取消入口地址,而实例方法就不一样了,实例方法是当所有对象都不存在的时候,入口地址才被取消。