静态方法与非静态方法的区别

转自:http://joe5456536.blog.163.com/blog/static/8537477320117136658629/html

http://www.cnblogs.com/devinzhang/archive/2012/04/27/2473570.html算法

 

我知道静态变量的使用要很当心,由于它在每一个对象中是共享的。可是对于静态方法个人认识只局限于下面:设计模式

● 生命周期(Lifecycle):安全

静态方法(Static Method)与静态成员变量同样,属于类自己,在类装载的时候被装载到内存(Memory),不自动进行销毁,会一直存在于内存中,直到JVM关闭。并发

非静态方法(Non-Static Method)又叫实例化方法,属于实例对象,实例化后才会分配内存,必须经过类的实例来引用。不会常驻内存,当实例对象被JVM 回收以后,也跟着消失。 函数

 ● 效率

 静态方法的使用效率比非静态方法的效率高。工具

 

按照上面的概念,只要内存够用,均可以使用静态的。使用静态方法会带来什么问题呢this

线程安全spa

静态方法是共享代码段,静态变量是共享数据段。既然是“共享”就有并发(Concurrence)的问题。线程

非静态方法是针对肯定的一个对象的,因此不会存在线程安全的问题。

静态方法和实例方法是同样的,在类型第一次被使用时加载。调用的速度基本上没有差异。

 

  • 不须要生成对象的  常常频繁使用的  工具类里的(如SqlHelper)
  • 适当地使用static方法自己并无什么,当一我的历来不懂使用多态、接口设计时,很天然地会滥用static方法。
  • 我的理解在多个类中须要调用而且是与对象无关的方法可设为静态方法,方便调用。
  • 全部对象共有的方法
  • 再不关系到任何于特定对象相关的操做  好比学生的年龄就是学生的相关。  修改学生的年龄就不适合用静态方法。  通常来讲,若是你的方法里没有用到this关键字,  那就适合用静态方法
  • 一般通用的类中一些经常使用的方法能够设计为静态类
  • 只要是没有用到类的状态信息,只从参数获取信息的均可觉得静态的
  • 能够实现某些特殊的设计模式:如Singleton
  • 因为没有this指针,能够把某些系统API的回调函数以静态函数的形式封装到类的内部
  • 能够封装某些算法,好比数学函数,如ln,sin,tan等等,这些函数本就不必属于任何一个对象,因此从类上调用感受更好
  • 总之,从OOA/OOD的角度考虑,一切不须要实例化就能够有肯定行为方式的函数都应该设计成静态的
  • 静态方法与非静态方法最明显的区别就是若是某个方法是公共静态的,那么能够直接经过类名.方法名的方法来调用,而公共实例方法则须要事先实例化对象,而后才能调用。
相关文章
相关标签/搜索