你没有在 A 的构造子中,或者 b 和 c 属性定义时进行显式对象初始化,所以你在 new A 的时候需要对它们进行初始化。
单例模式三要素:一个私有的本类的静态对象,一个私有的构造子,还有一个公开的提供私有对象访问的接口。实现这些就是单例。至于怎么写,看你环境的实现要求。

解决方案 »

  1.   

    单例常用方式class A{
      private static A a = new A();
      private A(){
      }  public static A getIns(){
        return a;
      }
    }
      

  2.   

    B和C需要new
    单例楼上都说了
      

  3.   

    class A{
        private B b;  //这是一个类
        private C c;  //这是另一个类
    }这只是声明了:类 A 中包含两个类型分别为 B 和 C 的成员。而成员的值不会自动生成,必须要赋值才行,否则 b 和 c 就一直为 null。
      

  4.   

    其实这个就是我想写A的单例造成的困扰,因为要做单例,所以A的构造就不能用了,至于b,和c的显式对象初始化。有两点考虑的地方,一个是因为本身是android程序,这样如果没有使用这个类A,可是因为b,和c的显式对象初始化导致了一些内存的浪费。第二则是B的成员变量有一个是软引用对象,如果单单只在类加载时初始化的话,后面不是有可能被回收,这样是不是有问题?
      

  5.   

    你的A类只有声明,没有实际创建对象。new A类的时候没有对b和c进行任何初始化工作,所以A类中的b和c你无法使用。
      

  6.   

    其实这个就是我想写A的单例造成的困扰,因为要做单例,所以A的构造就不能用了,至于b,和c的显式对象初始化。有两点考虑的地方,一个是因为本身是android程序,这样如果没有使用这个类A,可是因为b,和c的显式对象初始化导致了一些内存的浪费。第二则是B的成员变量有一个是软引用对象,如果单单只在类加载时初始化的话,后面不是有可能被回收,这样是不是有问题?
    没问题的,你考虑多了。还有,如果你用不着 b 和 c,可以考虑懒加载的。
      

  7.   

    class A {
    private B b;
    private C c;

    //如果需要用到 b 和 c的话就要new,如果不要用到,就可以不用new的
    private A(){
    b = new B();
    c = new C();
    }

    private static A a;

    public static A getInstance(){
    if(a==null){
    a = new A();
    }

    return a;
    }
    }希望对你有用。
      

  8.   

    需要New的
    单子模式有饿汉式和懒汉式,你百度一下吧
      

  9.   

    new 吧,实例化,分配内存空间。
      

  10.   

    http://blog.csdn.net/withiter/article/details/8140338
      

  11.   

    new 不 new是你的事,A初始化后,B,C 默认是没有new的
      

  12.   

    必须要new,单例可以去看百度百科。3种模式任你选