zoukankan      html  css  js  c++  java
  • 从内存层次浅谈动态内容与静态内容的区别

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5827364.html 
     
    静态内容:在内存中有一片特定的区域,不属于某特定的类对象,而是属于所有类对象,每个对象默认有指针指向这片区域,以调用静态的属性、方法
    当创建第一个类对象时,类代码由硬盘加载到内存时,静态内容加载一次,开辟区域存放,之后每次创建对象时不再加载。每个对象默认有指针指向这片区域,以调用静态的属性、方法。
    所以,静态方法的调用格式为:  类名.静态方法名 、  对象名.方法名  均可
     
     
    动态内容:每个类对象创建时,在内存中开辟一片区域给这个对象,用来存放数据以及进行运行,其中的所有都是专属该对象的,所以动态的内容调用只能通过  对象名.动态方法名、 对象名.动态属性   来调用。
     
     
     
    静态区域的内容无自动回收机制,占内存。
    一般把公用的属性、方法、工具包设置为静态的。
     
     
    分配内存语句——new
    每一个new语句,执行一次内存分配。在内存中开辟一片地,并按照new 的内容来使用这片区域。
     
    所以,在类中,动态方法调用动态方法,可以直接通过方法名调用,而不需new一个对象.方法名调用。就是因为同一个类占有一片空间,它的所有动态方法都在其中了,可以直接调用。 如果在动态方法中new一个类对象来调用动态方法的话,实质是调用那个新对象的方法了,而不是该方法所在的类对象的内存空间中封存的方法。
     
    补充一点干货:
    A a=new A()  与  A a=null 的区别:
    前者a存放的地址指向一片区域,那片区域按照A类来具体使用,存储属性数据、方法运行空间等。
    后者a存放的地址指向一片区域,但那片区域没有具体的使用规则,相当于天地初开,一片混沌。
  • 相关阅读:
    【设计模式】策略模式
    【设计模式】模板方法模式
    【C++】《Effective C++》第五章
    【C++】《Effective C++》第四章
    free命令详解(内存)
    top命令详解(动态进程)
    ps命令详解(静态进程)
    SpringBoot_集成Redis
    SpringBoot_热部署插件
    SpringBoot_实现RESTfull API
  • 原文地址:https://www.cnblogs.com/ygj0930/p/5827364.html
Copyright © 2011-2022 走看看