静态方法何时使用

  • 如果某些操作不依赖具体实例,那它就是静态的,反之如果某些操作是依赖具体实例的(例如访问一个特定会员的名称),那它就应该是实例化的。
  • 静态方法不用new对象可以直接调用
  • 1.与类相关与对象无关 
    2.不需要对象的“轻”方法 
    3.工厂方法
  • 如果某个方法是用频率较高,或者方法本身通用性较强,无需初始化类成员变量,则可以使用静态方法,那样方便,速度也快.
  • 可以直接拿来就用的方法,就算是静态的.
  • 肯定不涉及具体对象,因为静态方法内,是无法直接使用任何非静态成员的。
  • (1)制作工具类 
    (2)可以当作"作局"对象或方法来使用
  • 静态方法和实例方法是一样的,在类型第一次被使用时加载。调用的速度基本上没有差别。
  • 静态方法不用创建实例就可调用,比较简单从面向对象的角度上来说,在抉择使用实例化方法或静态方法时,应该根据是否该方法和实例化对象具有逻辑上的相关性,如果是就应该使用实例化对象  反之使用静态方法
  • 不需要生成对象的 
    经常频繁使用的 
    工具类里的(如SqlHelper)
  • 适当地使用static方法本身并没有什么,当一个人从来不懂使用多态、接口设计时,很自然地会滥用static方法。
  • 个人理解在多个类中需要调用并且是与对象无关的方法可设为静态方法,方便调用。
  • 所有对象共有的方法
  • 再不关系到任何于特定对象相关的操作 
    比如学生的年龄就是学生的相关。 
    修改学生的年龄就不适合用静态方法。 
    一般来说,如果你的方法里没有用到this关键字, 
    那就适合用静态方法
  • 通常通用的类中一些常用的方法可以设计为静态类
  • 只要是没有用到类的状态信息,只从参数获取信息的都可以为静态的
  • 可以实现某些特殊的设计模式:如Singleton
  • 由于没有this指针,可以把某些系统API的回调函数以静态函数的形式封装到类的内部
  • 可以封装某些算法,比如数学函数,如ln,sin,tan等等,这些函数本就没必要属于任何一个对象,所以从类上调用感觉更好
  • 总之,从OOA/OOD的角度考虑,一切不需要实例化就可以有确定行为方式的函数都应该设计成静态的
  • 静态方法与非静态方法最明显的区别就是如果某个方法是公共静态的,那么可以直接通过类名.方法名的方法来调用,而公共实例方法则需要事先实例化对象,然后才能调用。

  这些各种说法,基本上都是正确的。

时间: 2024-08-19 06:12:35

静态方法何时使用的相关文章

【day25】类方法classmethod、静态方法staticmethod、普通方法

  普通方法:通过实例传参数进行调用的方法.s = 类(参数) 静态方法staticmethod:如果我们想写仅仅与类交互而不是与实例交互的方法,用类方法就可以达成,好处是不让类代码的关系到类定义的外面,也避免了今后代码维护的困难. class Foo: def __init__(self): pass @staticmethod def say_hi(self): print('hi,im staticmethod') Foo.say_hi() #不用实例化,就可以调用该方法 #输出hi,im

python 静态方法、实例方法、类方法

实例方法: class A: data = 0 def printd(self): print(self.data) type(A) #out:type A.__dict__ #out: a = A() #out:{} 类方法:@classmethod class A: data = 0 def printd(self): print(self.data) def getdata(): A.data = 1 print(A.data) class A: data = 0 def printd(s

PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化)/约束类型/魔术方法小结

  前  言  OOP  学习了好久的PHP,今天来总结一下PHP中的抽象类与抽象方法/静态属性和静态方法/PHP中的单利模式(单态模式)/串行化与反串行化(序列化与反序列化). 1  PHP中的抽象类与抽象方法 1.什么是抽象方法?              没有方法体 {} 的方法,必须使用abstract 关键字修饰.这样的方,我们叫做抽象方法.                    abstract function say(); //    抽象方法 2.什么是抽象类?        

Python-面向对象高级语法之静态方法、类方法

静态方法 一.什么是静态方法 普通的方法可以在实例化后直接调用,并且在方法里可以通过self.xxx调用实例变量或类变量,而静态方法是不可以访问实例变量或类变量,一个不能访问实例变量和类变量的方法,实际上已经和类本身没什么关系了.唯一与类有关联的就是有需要通过类名来调用这个方法. 二.如何使用静态方法 通过@staticmethod装饰器把需其装饰的方法即可变成一个静态方法. # _*_ coding:utf-8 _*_ class Dog(object): def __init__(self,

静态方法实例方法

js里面的实例方法和静态方法 转自:http://blog.csdn.net/oryjk/article/details/46901035 静态方法是可以直接用类名.方法名去调用的,而实例方法是不可以的,他必须要用实例才可以去调用, var Person=function(){}; Person.say=function(){ console.log('I am a Person,I can say.') }; Person.prototype.getName=function(name){ c

Java复习第三天-静态方法

静态方法是属于类的,内存必须为它分配内存空间,这个空间一直由静态方法占用,内存管理器不会由于静态方法没有被调用而将静态方法的存储空间收回,这样如果将所有的方法都声明为静态方法,就会占用大量的内存空间,最后是系统变慢.而普通的成员方法是由对象调用的,内存并不会一直为起分配内存,只有调用的时候才为其分配存储空间,而当其没有被调用时,存储空间就会被内存管理其收回,释放没有用的空间,提高的系统的运行速率! 好处:就像你说的不用实例化直接通过类名调用. 弊端:静态方法当加载的时候就已经申请了内存空间,不用

Swift静态方法

与静态属性类似,Swift中还定义了静态方法,也称为类型方法,所谓"类型"是指枚举.结构体和类.静态方法定义的方法也是与静态属性类似的,枚举和结构体的静态方法使用的关键字是static,类的静态方法使用的关键字是class.一.结构体中静态方法下面我们先看一个结构体静态方法的示例,代码如下: [html] view plaincopy struct Account { var owner : String = "Tony"                 //账户名

Python的静态方法和类成员方法

http://www.cnblogs.com/2gua/archive/2012/09/03/2668125.html Python的静态方法和类成员方法都可以被类或实例访问,两者概念不容易理清,但还是有区别的: 1)静态方法无需传入self参数,类成员方法需传入代表本类的cls参数: 2)从第1条,静态方法是无法访问实例变量的,而类成员方法也同样无法访问实例变量,但可以访问类变量: 3)静态方法有点像函数工具库的作用,而类成员方法则更接近类似Java面向对象概念中的静态方法. 实现静态方法和类

201671010145 2016-2017《Java程序设计》静态域与静态方法

1.静态域 如果将域定义为static,那么每个类中只有一个这样的域.而每一个对象对于所有的实例域却都有自己的一份拷贝.例如,假定需要给每一个雇员赋予唯一的表示码.这里给Employee类添加一个实例域id和一个静态域nextld: class Employee { private int id; private static int nextId=1: } 现在,每一个雇员对象都有一个自己的id域,但这个类的所有实例将共享一个nextid域,换句话说,如果有1000个Employee类的对象,

python静态方法类方法属性方法

Python的静态方法和类成员方法都可以被类或实例访问,两者概念不容易理清,但还是有区别的: 1)静态方法无需传入self参数,类成员方法需传入代表本类的cls参数: 2)从第1条,静态方法是无法访问实例变量的,而类成员方法也同样无法访问实例变量,但可以访问类变量: 3)静态方法有点像函数工具库的作用,而类成员方法则更接近类似Java面向对象概念中的静态方法. 静态方法 @staticmethod    def staticmd():        print '静态方法 @classmetho