代码如下: public class Singleton {
    private final static Singleton INSTANCE = new Singleton();
 
    // Private constructor suppresses   
    private Singleton() {}
 
    // default public constructor
    public static Singleton getInstance() {
        return INSTANCE;
    }
  }为什么方法要static的?
如果不是静态方法会怎么样?

解决方案 »

  1.   

    那如果我这样写:
    public class Singleton {
        private final static Singleton INSTANCE = new Singleton();
     
        // Private constructor suppresses   
        private Singleton() {}
     
        private static Singleton getTheInstance() {
            return INSTANCE;
        }    public Singleton getInstance() {
            return getTheInstance();
        }

      }这样还能算单例模式吗?
      

  2.   


    这样写,我理解为不能算单例模式了
     你这样写了以后  请问 你怎么使用INSTANCE这个单例对象??
      

  3.   

    单例模式 是共享一个对象,,你这样子之后 有一个问题getInstance()不是静态方法 ,,需要new出来,违背单例模式的原理。并且Singleton这个类没有公共的 构造方法,,此路不通,
      

  4.   

    如果不是static的话,你要用getInstance方法是否必须new一下,但是如果你new时候就不是单例了,而是每次都创建一个新的。
    所以单例最终概念是始终获取一个相同对象,好处是可以更好节约空间,节约时间,并且可以很好解决多线程以及并发很高的问题!
      

  5.   

    一个方法是定义为静态的还是非静态的,你就要考虑到这个方法里头
    是否会用到实例成员,如果没有实例成员就定义为static,这样的
    方法可以称为工具方法。当然理论上你也可以定义为实例的,但是不
    建议你这么做,因为这也算是java中一个约定俗成的了,当然没有
    明确规定一定要用static,只是这一个小地方在将来工作时也就能
    看出一个人对java细节的把握了。你也可以去看一下jdk中的Math就
    都是静态的,那就只是一个工具类而已。
      

  6.   

    单利只能自己new一个自己出来, 外部类是无法new滴,因为他滴构造器是private滴,如果你的是非static .那么你就得不到这个对象.. static 直接类名.方法名.
      

  7.   

    即使撇开其它能不能调用到,是不是符合单例模式的因素先不说,
    把static initializer换成instance initializer就会造成潜在的StackOverflowError的隐患
      

  8.   

    public class Singleton {  
      
        /* 私有构造方法,防止被实例化 */  
        private Singleton() {  
        }  
      
        /* 此处使用一个内部类来维护单例 */  
        private static class SingletonFactory {  
            private static Singleton instance = new Singleton();  
        }  
      
        /* 获取实例 */  
        public static Singleton getInstance() {  
            return SingletonFactory.instance;  
        }  
      
        /* 如果该对象被用于序列化,可以保证对象在序列化前后保持一致 */  
        public Object readResolve() {  
            return getInstance();  
        }  
    }  
      

  9.   

    单例嘛,全局只允许有1个对象存在嘛。你创造个啥都得通过 静态的static原因嘛,构造私有了,你咋new对象?比如说,一个JDBC的连接对象 Connection你写了一个系统,肯定全局就只要这么一个Connection那么就单例实现一个。
      

  10.   

    因为你都是单例设计模式了,不让用户new对象,所以你得提供一个接口提供给用户一个对象了,但是这个类是不能new的所以要调用方法只能是静态方法,来给用户返回一个对象。