日期:2014-05-20  浏览次数:20744 次

静态main函数中实例化自身类的问题
如下代码
Java code


public class Test{

    public static void main(String[] args) {
        Test t = new Test();
        t.output("hello");
    }

    private void output(String msg){
       System.out.print(msg);
    }

}



Test t = new Test();
这句话中在main中,定义了自身的实例。
请问这有什么好处?

把output方法改为static不也是一样嘛,为什么要实例化自身??


------解决方案--------------------
就以上你的代码来说,真没啥区别
------解决方案--------------------
在你这个demo里头效果没差别。但是如果别的类调用你这个output方法的时候 如果加了static 就可以直接
Test.output OK? 否则就要new Test().output()

------解决方案--------------------
如果频繁调用的方法 ,就声明成为 static 的吧,免得每次使用都得创建一个对象实例,浪费内存,而且创建对象时,分配存储空间也浪费时间
------解决方案--------------------
如5楼所述,分情况处理,按照极端例子来举:
1、函数过程跟上下文有密切关系,必须依赖成员属性才能完成,比如值对象的get和set就是个极端例子,那么你就应该定义方法啊;
2、函数过程跟上下文及其它函数之间毫无依赖关系,不依赖于任何成员属性,而且没有任何业务语义,那么就可以定义为static,很多Util类就是这么来的;
3、除此以外,还有某些辅助构造函数,比如单例的或者是工厂之类的,也会使用static。

设计就跟武功一样,大多数情况下没有绝对的好或者不好,根据经验打组合拳吧。