A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 柴亚飞 黑马帝   /  2011-11-2 16:05  /  2632 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我主要是想问,static 方法是不是和static属性一样,在相同类的不同对象中只占一份内存空间?

12 个回复

正序浏览
张翼 黑马帝 2011-11-7 19:16:15
13#
static修饰的方法是类级别,当API中标明为static时候,表示调用该方法除了对象,还可以用类;
还有类方法不可以被重写;
回复 使用道具 举报
本帖最后由 肖瑞军 于 2011-11-5 22:41 编辑

      static 方法在该方法所属类型第一次被使用的时候加载、在该类型所在应用程序域卸载的时候卸载、而实例方法(非静态方法),是在第一次该方法第一次调用的时候会加载、然后被缓存起来。但是中间如果有垃圾收集的话, 就会被收集,那下次再调用该方法时,又得重新加载该方法。也就是说,实例方法有可能加载多次。  总的来说,static 方法只用加载一次,但一直会占用内存。多了些资源消耗;而实例方法需要加载多次,但不会一直占用内存。少些资源消耗。一般来说, 在程序里面,一些使用频率高的方法就用static 方法、使用频率低的则用实例方法。
回复 使用道具 举报
坚强 黑马帝 2011-11-5 21:19:11
11#
static修饰的成员(变量和函数)都在堆内存中占一份空间,随着对象的加载而加载
回复 使用道具 举报
static方法是独立于对象而存在的,也就是类加载器加载类以后你就可以直接调用(可以通过类名来进行),因此,static属性在内存中就只有一个。
静态方法只是依附在类存在,而不是依赖对象而存在,所以在使用这些方法的时候,你不用new对象就可以使用,还有一个很大的特点是全局唯一,也就是你再任何地方的程序对它的引用都是访问同一个方法或是对象,如果你用static的对象,那么所有程序访问的都是一个对象,任何地方做了改变都会影响该对象,而如果是new出来的,那几完全不一样了。

具体是否要采用static方法,我觉得应该根据对象设计,如果是和对象没有直接联系或是交互,或是需要全局唯一,都可以采用static方法,对方法和对属性都是一样的。

static方法访问也是比较快的,比对象的方法要快,不用生成对象,就可以调用,但千万记住了,这不意味着所有的方法都采用static。需要根据实际情况来使用。
回复 使用道具 举报
坚强 黑马帝 2011-11-4 14:36:20
9#
static 是在堆内存中的 在建立对象的时候就会在堆内存中开辟空间
回复 使用道具 举报
张晨 黑马帝 2011-11-4 13:39:17
8#
还有static数据只初始化一次,所以当一个循环中用static数据时,即使读到如 static int a =1 这个语句 也不会在给a赋1了,而是继续使用在内存中a的数值
回复 使用道具 举报
byronsong 黑马帝 2011-11-4 13:28:43
7#
本帖最后由 byronsong 于 2011-11-4 13:29 编辑

static 的方法和属性都是在内存中的方法区存在,不在堆中,也不在栈中,随着类的加载就已经在内存中存在了,并且只有一个,不需要new对象来使用,直接通过类名来调用。一般公有的属性和方法都设置成静态的 方便使用。
回复 使用道具 举报
哦,知道了。谢谢
回复 使用道具 举报
static方法和非static的方法的区别难道仅仅就是一个可以直接用类 名.方法名直接调用,一个必须通过对象名.方法名来调用?

前辈们都来指教一下啊
回复 使用道具 举报
是这样的,static修饰的方法或是变量是独享一块内存空间
回复 使用道具 举报
那static方法呢?static方法是不是也只有一份?
回复 使用道具 举报
static属性在内存中就只有一个
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马