本文章已收录于:
分类:
作者同类文章
X
版权声明:本文为博主原创文章,未经博主允许不得转载。
那天面试,没有答出来,很可惜,但是还是拿到了offer,在此做一个总结,希望你们看到能够受用。
● 生命周期(Lifecycle):
静态方法(Static Method)与静态成员变量一样,属于类本身,在类装载的时候被装载到内存(Memory),不自动进行销毁,会一直存在于内存中,直到JVM关闭。
非静态方法(Non-Static Method)又叫实例化方法,属于实例对象,实例化后才会分配内存,必须通过类的实例来引用。不会常驻内存,当实例对象被JVM 回收之后,也跟着消失。
● 在内存中存储位置
静态方法和静态变量创建后始终使用同一块内存,是连续的。
非静态方法会存在于内存的多个地方,是离散的。
● 效率
静态方法的使用效率比非静态方法的效率高。
● 线程安全
静态方法是共享代码段,静态变量是共享数据段。既然是“共享”就有并发(Concurrence)的问题。
非静态方法是针对确定的一个对象的,所以不会存在线程安全的问题。
● 使用范围
静态方法:⒈ 有静态属性的类,一般会定义静态方法。⒉ 没有属性的类,一般会定义静态方法。⒊ 如果一个方法与他所在类的实例对象无关,那么它就应该是静态的。静态方法可以被继承但是不能被覆盖。
● 总计
如果静态方法在系统中定义太多,会占用大量的资源,最后造成内存溢出,所以静态方法不能滥用。如果从线程安全、性能、兼容性上来看,选用实例化方法为宜。
static 方法 (静态方法)
方法在该方法所属类型第一次被使用的时候加载、在该类型所在应用程序域卸载的时候卸载、也就是说 static 方法只加载一次、除非整个Domain 被卸载了。
实例方法(非静态方法)
方法是在第一次该方法第一次调用的时候会加载、然后被缓存起来。但是中间如果有GC 的话, 就会被收集,那下次再调用该方法时,又得重新加载该方法。也就是说,实例方法有可能加载多次。
总的来说,static 方法只用加载一次,但一直会占用内存。多了些资源消耗;而实例方法需要加载多次,但不会一直占用内存。少些资源消耗。一般来说, 在程序里面,一些使用频率高的方法就用static 方法、使用频率低的则用实例方法。
-
顶
- 0
-
踩
- 0
我的同类文章
http://blog.csdn.net
- •关于github上边phonecat的路由与多视图解析2016-01-13
- •em和px的区别2016-01-12
- •我的2016之旅开启2016-01-06
- •angularjs带你走向世界!(世界漂)2016-01-06
- •他19岁创业至今2年 没花投资人一分钱2015-12-28
- •bootstrap+angular关于js常见的一些问题2015-12-21
- •Error: [$injector:modulerr] Failed to instantiate module phonecatApp2016-01-13
- •AngularJS 开发者最常犯的 10 个错误2016-01-11
- •angulr概念--给技术加点料2016-01-06
- •angulr的核心价值观2015-12-31
- •谨记初学者必须掌握的AngularJS技术要点清单2015-12-25