首页 > 代码库 > 从内存层次浅谈动态与静态
从内存层次浅谈动态与静态
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5827364.html
静态内容:在内存中有一片特定的区域,不属于某特定的类对象,而是属于所有类对象,每个对象默认有指针指向这片区域,以调用静态的属性、方法
当创建第一个类对象时,类代码由硬盘加载到内存时,静态内容加载一次,开辟区域存放,之后每次创建对象时不再加载。每个对象默认有指针指向这片区域,以调用静态的属性、方法。
所以,静态方法的调用格式为: 类名.静态方法名 、 对象名.方法名 均可
动态内容:每个类对象创建时,在内存中开辟一片区域给这个对象,用来存放数据以及进行运行,其中的所有都是专属该对象的,所以动态的内容调用只能通过 对象名.动态方法名、 对象名.动态属性 来调用。
静态区域的内容无自动回收机制,占内存。
一般把公用的属性、方法、工具包设置为静态的。
分配内存语句——new
没一个new语句,执行一次内存分配。在内存中开辟一片地,并按照new 的内容来使用这片区域。
所以,在类中,动态方法调用动态方法,可以直接通过方法名调用,而不需new一个对象.方法名调用。就是因为同一个类占有一片空间,它的所有动态方法都在其中了,可以直接调用。 如果在动态方法中new一个类对象来调用动态方法的话,实质是调用那个新对象的方法了,而不是该方法所在的类对象的内存空间中封存的方法。
补充一点干货:
A a=new A() 与 A a=null 的区别:
前者a存放的地址指向一片区域,那片区域按照A类来具体使用,存储属性数据、方法运行空间等。
后者a存放的地址指向一片区域,但那片区域没有具体的使用规则,相当于天地初开,一片混沌。
从内存层次浅谈动态与静态
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。