首页 > 代码库 > 从内存层次浅谈动态与静态

从内存层次浅谈动态与静态

转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5827364.html 
 
静态内容:在内存中有一片特定的区域,不属于某特定的类对象,而是属于所有类对象,每个对象默认有指针指向这片区域,以调用静态的属性、方法
当创建第一个类对象时,类代码由硬盘加载到内存时,静态内容加载一次,开辟区域存放,之后每次创建对象时不再加载。每个对象默认有指针指向这片区域,以调用静态的属性、方法。
所以,静态方法的调用格式为:  类名.静态方法名 、  对象名.方法名  均可
 技术分享
 
动态内容:每个类对象创建时,在内存中开辟一片区域给这个对象,用来存放数据以及进行运行,其中的所有都是专属该对象的,所以动态的内容调用只能通过  对象名.动态方法名、 对象名.动态属性   来调用。
技术分享
 
 
 
静态区域的内容无自动回收机制,占内存。
一般把公用的属性、方法、工具包设置为静态的。
 
 
分配内存语句——new
没一个new语句,执行一次内存分配。在内存中开辟一片地,并按照new 的内容来使用这片区域。
 
所以,在类中,动态方法调用动态方法,可以直接通过方法名调用,而不需new一个对象.方法名调用。就是因为同一个类占有一片空间,它的所有动态方法都在其中了,可以直接调用。 如果在动态方法中new一个类对象来调用动态方法的话,实质是调用那个新对象的方法了,而不是该方法所在的类对象的内存空间中封存的方法。
 
补充一点干货:
A a=new A()  与  A a=null 的区别:
前者a存放的地址指向一片区域,那片区域按照A类来具体使用,存储属性数据、方法运行空间等。
后者a存放的地址指向一片区域,但那片区域没有具体的使用规则,相当于天地初开,一片混沌。

从内存层次浅谈动态与静态