何时用静态方法,何时用实例方法(大家分享与讨论,java语言)因为最近公司评审代码,有一大哥老是喜欢指着代码来句:“其实你这里应该改为静态的,你有没有想过,你说说你这里你为什么没有使用静态方法,这里你为什么没有把这个移到方法外面当着静态变量,你知道这样要消耗多少资源吗(确实是我真的不知道呢)”。然后仔细想来确实改为静态方法也没有错,但是好多地方我觉得从oo思想上或者是因为我习惯性思考就用了实例方法,确实没有考虑改为静态方法效率会有多少提高,也不知道怎么计算出浪费的效率,纠结。另外我觉得我好像很懒的考虑什么效率,似乎排斥使用静态方法,晕
static是属于类得,是大家共享的
非static是属于某个实例对象 ,对象人手一份,每份互不干扰的
真有那么消耗资源么?effective java上说,慎用优化,某些情况下根本不需要做特别的优化。
深一点来说,如果一个类没有成员变量,那就考虑里面的方法是否需要变成静态。
类为什么要实例化是因为只有成员变量所占的内存地址不一样,也就展现了类不同的形态。
你可以看看java源码
举个例子 Collections 类
里面似乎都是静态变量
比如sort方法为什么要定义成静态的?---因为我就是要帮别的类实例处理排序问题的!
自身不需要成员变量,用谁都一样!或者说它的调用和它自身成员变量无关,那还不是用谁都一样?我就静态好了,调用方便,不用new,少占内存!
你老大哥基本说的是对的。
2:不可以使用动态代理,无法使用 AOP 对其进行增强处理。比如:某些 DAO 使用了静态方法,那么就不可能对其进行切面式的事务控制。因为增强代理类是原生类的子类,通过对父类方法进行切面增强。由于静态方法不具有这一特性,所以静态方法是无法使用动态代理、AOP 的。可以看一下 Java 类库源代码,或者 Spring、Struts 等一些开源框架,除了 Util 工具类之外,基本上看不到静态方法的踪迹。
个人观点,仅供参考